Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

160
Views
Enviar el estado actual de un proceso largo mientras se está ejecutando

Me gustaría saber si hay una manera en ASP.NET C# para mostrar de alguna manera al usuario que el trabajo aún continúa mientras se ejecuta algo que tarda años en finalizar.

Déjame explicarte un poco más con algo de código. Primero tengo una página ASPX que muestra algunos elementos de carga de archivos y un botón para enviar el formulario al servidor. Le permite al usuario enviar 3 archivos diferentes que se procesan de manera diferente:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="MassUpdates.aspx.cs" Inherits="MassUpdates" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <h3 style="font: bold;">Mass Updates</h3> <hr /> <div class="row"> <div class="col-12 mb-2"> <asp:Label ID="Label0" runat="server" Text="File 1 : "></asp:Label> <asp:FileUpload ID="fup1" runat="server" /> </div> <div class="col-12 mt-2 mb-2"> <asp:Label ID="Label1" runat="server" Text="File 2 : "></asp:Label> <asp:FileUpload ID="fup2" runat="server" /> </div> <div class="col-12 mt-2 mb-2"> <asp:Label ID="Label2" runat="server" Text="File 3 : "></asp:Label> <asp:FileUpload ID="fup3" runat="server" /> </div> </div> <div class="row"> <div class="col-12 mt-2"> <asp:Button ID="btnEnvoi" runat="server" Text="Envoyer" OnClick="btnEnvoi_Click" /> </div> <div class="col-12 mt-2"> <asp:Label ID="lblMsg" runat="server" Text="" Visible="false"></asp:Label> </div> </div> </asp:Content>

Luego, en el código detrás de la página, tengo una pequeña función llamada cuando el usuario presiona el botón que llama a cada proceso de archivo si el archivo se ha soltado:

 protected void btnSend_Click(object sender, EventArgs e) { if (fup1.HasFiles) { result += trtFile1(); // Return a string that give the final feedback of the execution for File 1 } if (fup2.HasFiles) { result += trtFile2(); // Return a string that give the final feedback of the execution for File 2 } if (fup3.HasFiles) { result += trtFile3(); // Return a string that give the final feedback of the execution for File 3 } lblMsg.Text = result; }

Pero como dije antes, si el usuario envía 3 archivos enormes, hacer todo el proceso lleva años (es una imagen) y se preguntan si la aplicación se bloqueó o aún se está ejecutando.

Lo que quiero saber es si hay una manera de enviar a la página del lado del cliente alguna información (como un texto o un valor para establecer en una barra de progreso) cuando llegamos a un paso en la función. Algo como eso :

 protected void btnSend_Click(object sender, EventArgs e) { if (fup1.HasFiles) { // Send to the client that we start file 1 result += trtFile1(); // Return a string that give the final feedback of the execution for File 1 } if (fup2.HasFiles) { // Send to the client that we start file 2 result += trtFile2(); // Return a string that give the final feedback of the execution for File 2 } if (fup3.HasFiles) { // Send to the client that we start file 3 result += trtFile3(); // Return a string that give the final feedback of the execution for File 3 } lblMsg.Text = result; }

¡Gracias si alguno de ustedes ya escuchó sobre este tipo de funcionalidad o tiene algo similar en su bolsillo!

Rolstyam.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La forma en que he hecho cosas como esta es:

  1. El cliente realiza una solicitud, incluido un Guid que sirve como clave para los informes de progreso
  2. El servidor comienza a procesar y actualiza periódicamente alguna estructura de datos compartidos con el progreso, utilizando el Guid como clave.
  3. El cliente usa un temporizador para sondear periódicamente el progreso del servidor, nuevamente usando el GUID como clave.
  4. Cuando el servidor completa el procesamiento, debe eliminar el GUID del almacenamiento compartido para evitar pérdidas de memoria.

No tengo idea de si esta es la forma "correcta" de hacerlo, solo que funcionó lo suficientemente bien para mi propósito, es decir, un backend de aplicación que realiza un trabajo intensivo de procesamiento. Si hay una mejor manera, espero que alguien la publique. No sé qué tan aplicable es si la descarga de datos es el principal cuello de botella, ni qué tan difícil sería usarlo para una página web.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!