如何使用异步来提高性能的WinForms?(How can I use async to incre

2019-07-20 04:44发布

我在做一些处理任务繁重而每一次我开始执行该命令我的winform冻结比我不能,甚至直到任务完成移动它时。 我用同样的方法从微软,但没有似乎改变。

我的工作环境的Visual Studio 2012和.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();
    }
}

Answer 1:

是的,你仍然在做UI线程上的所有工作。 使用async不会自动卸载工作到不同的线程。 你可以尽管这样做:

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();
    }
}

采用Task.Run将意味着ProcessFile (重件作品)是在不同的线程执行。



Answer 2:

您还可以通过在新的线程开始你的任务做到这一点。 只要使用Thread.Start或螺纹。 ParameterizedThreadStart

看到这些,供大家参考:

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

先从参数线



文章来源: How can I use async to increase WinForms performance?