Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda