¿Cómo puedo usar la función asincrónica para boost el rendimiento de WinForms?

Estaba haciendo una tarea pesada de procesador y cada vez que empiezo a ejecutar ese comando, mi winform se congela y ni siquiera puedo moverlo hasta que la tarea se complete. utilicé el mismo procedimiento de Microsoft pero nada parece cambiarse.

mi entorno de trabajo es visual studio 2012 con .net 4.5

private async void button2_Click(object sender, EventArgs e) { Task task = OCRengine(); rtTextArea.Text = await task; } private async Task OCRengine() { using (TesseractEngine tess = new TesseractEngine( "tessdata", "dic", EngineMode.TesseractOnly)) { Page p = tess.Process(Pix.LoadFromFile(files[0])); return p.GetText(); } } 

Sí, todavía estás haciendo todo el trabajo en el hilo de UI . El uso de async no descargará automáticamente el trabajo en diferentes subprocesos. Podrías hacer esto sin embargo:

 private async void button2_Click(object sender, EventArgs e) { string file = files[0]; Task task = Task.Run(() => ProcessFile(file)); rtTextArea.Text = await task; } private string ProcessFile(string file) { using (TesseractEngine tess = new TesseractEngine("tessdata", "dic", EngineMode.TesseractOnly)) { Page p = tess.Process(Pix.LoadFromFile(file)); return p.GetText(); } } 

El uso de Task.Run significará que ProcessFile (el trabajo pesado) se ejecuta en un hilo diferente.

También puede hacer esto comenzando su tarea en un nuevo hilo. Solo use Thread.Start o Thread. ParameterizedThreadStart

Véalos para su referencia:

http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx

Comience hilo con parámetros