相关疑难解决方法(0)

如何使用async来提高WinForms性能?

我正在做一些处理器繁重的任务,每次我开始执行该命令时,我的winform冻结,我甚至无法移动它直到任务完成.我使用了与微软相同的程序,但似乎没有任何改变.

我的工作环境是使用.net 4.5的visual studio 2012

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous tesseract

26
推荐指数
1
解决办法
2万
查看次数

在WinForms上使用async/await访问Task.Run中的UI控件

我在WinForms应用程序中有以下代码,只有一个按钮和一个标签:

using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            await Run();
        }

        private async Task Run()
        {
            await Task.Run(async () => {
                await File.AppendText("temp.dat").WriteAsync("a");
                label1.Text = "test";
            });    
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在研究的实际应用程序的简化版本.我的印象是,通过在我使用async/await Task.Run我可以设置label1.Text属性.但是,当运行此代码时,我得到错误,我不在UI线程上,我无法访问该控件.

为什么我无法访问标签控件?

c# winforms task-parallel-library async-await

23
推荐指数
5
解决办法
5万
查看次数