Pregunta

Tengo un proceso en un sitio web (Asp.net 3.5 usando Linq to Sql para el acceso a datos) que necesita para funcionar de la siguiente manera:

  1. Subir archivo
  2. Registrar y guardar información sobre el archivo a la base de datos
  3. Importar datos desde un archivo en la base de datos
  4. Redirección a página diferente

Cuando se ejecutan de forma secuencial como este, todo funciona bien.Sin embargo, dado que los archivos importados pueden ser bastante grandes, me gustaría paso 3 para ejecutar en un subproceso diferente desde el subproceso de interfaz de usuario.El usuario debe llegar al paso 4 mientras que el paso 3 está todavía en progreso, y la pantalla en el paso 4 se actualizará periódicamente para que el usuario sepa cuando se completa la importación.

Yo soy el manejo de la rosca de la siguiente manera:

public class Import {

  public static void ImportPendingFile() {
    Import i = new Import();
    Thread newThread = new Thread(new ThreadStart(i.ImportFile));
    newThread.Start();
  }

  public void ImportFile() {
    // 1. Query DB to identify pending file
    // 2. Open up and parse pending file
    // 3. Import all data from file into DB
    // 4. Update db to reflect that import completed successfully
  }
}

Y en el codebehind:

protected void butUpload(object sender, EventArgs e) {
  // Save file, prepare for import
  Import.ImportPendingFile();
  Response.Redirect(NewLocation);
}

Al hacer esto, soy capaz de confirmar a través del depurador de que el nuevo subproceso se inicia correctamente.Sin embargo, cuando hago esto, el hilo se anula cuando se intenta acceder al archivo (paso 2 en el código detrás).Esto funciona bien cuando se ejecuta en el hilo principal, por lo tanto, algo acerca de la multi-threaded situación es la prevención de este.Yo había pensado que, puesto que el archivo se guardará en el disco (que es) que no debería haber ningún problema con la apertura de un subproceso diferente.Alguna idea de donde me han ido mal y cómo puedo solucionarlo?Gracias!

Nota:Estoy utilizando una tercera parte de la asamblea para abrir el archivo.Mediante reflector, me he encontrado con el siguiente código relacionado con cómo se abre el archivo:

if (File.Exists(fileName)) {
  using (FileStream stream = new FileStream(fileName, FileMode.Open)) {
    // use stream to open file
  }
}
¿Fue útil?

Solución

Trate De Respuesta.Redirect(url, false) , más la 'Respuesta' se terminó poco después de esa llamada.

Otros consejos

ASP.NET el estado de vista es una gran característica y una herramienta esencial para el desarrollo web de hoy en día.Se mantiene el estado de una página a medida que viaja de ida y vuelta.No hay necesidad de preocuparse acerca de la restauración de los valores de controles de página entre postbacks.En este artículo usted recibirá una perspectiva detallada sobre el estado de vista.Vamos a hablar acerca de las maneras de reducir la innecesaria carga y la protección del estado de la vista de los curiosos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top