c# - ¿Cómo puedo usar la función asincrónica para aumentar el rendimiento de WinForms?
asynchronous tesseract (2)
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<string> 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.
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<string> task = OCRengine();
rtTextArea.Text = await task;
}
private async Task<string> OCRengine()
{
using (TesseractEngine tess = new TesseractEngine(
"tessdata", "dic", EngineMode.TesseractOnly))
{
Page p = tess.Process(Pix.LoadFromFile(files[0]));
return p.GetText();
}
}
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