2014-02-12 33 views
1

我刚开始使用MonoMac。我有一个窗口,其中包含一个按钮和一个标签,如果我点击按钮一个进程开始(执行一个循环),直到循环完成,UI被锁定,但我想更新标签(或未来的进度条)。我有什么要做,这样(异步)的工作流程工作?如何在MonoMac中做后台处理

回答

3

目前您的代码将全部在UI线程上运行,因此您无法报告进度,因为线程正在处理您的循环。 MonoMac有TPL支持,所以你应该可以利用它来在后台运行你的代码

Task.Factory.StartNew(() => { 
    for (...) 
    { 
     ... 
     // update UI 
     uiControl.BeginInvoke(() => { 
      uiControl.Text = "Updated from thread"; 
     }); 
    } 
}); 
+0

非常好,谢谢。但我注意到,在这个过程中,我的应用程序提高了95%的CPU使用率。 – john84

+1

@ john84你可能做了太多的UI更新? – James

+0

对,我知道了,我的通知在错误的位置。再次感谢你, – john84