How can I use async to increase WinForms performance?
asynchronous, c#, tesseract
Solution
Yes, you're still doing all the work on the UI thread. Using `async` isn't going to automatically offload the work onto different threads. You could do this though:
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();
}
}
The use of `Task.Run` will mean that `ProcessFile` (the heavy piece of work) is executed on a different thread.
Problem
i was doing some processor heavy task and every time i start executing that command my winform freezes than i cant even move it around until the task is completed. i used the same procedure from microsoft but nothing seem to be changed. my working environment is visual studio 2012 with .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(); } } ```