c#在不使用调度程序的情况下访问Task中的ui元素

Muh*_*nan 1 .net c# wpf multithreading task-parallel-library

我希望找到一种机制来访问/操作单独的线程中的ui元素(如文本框)属性,但使用Dispatcher访问它意味着控制UI线程,让用户做任何我不想要的事情.冻结你..

所以实际上想要在单独的线程中访问ui而无需保持主UI线程

bra*_*ing 5

您无法在另一个线程上访问UI元素的依赖项属性.这个不允许.

但是,更新文本属性的速度非常快,而且很可能不是您的瓶颈.计算该文本属性的值可能很慢.因此,例如,如果您从UI触发了事件,则可以生成将在另一个线程上运行的任务并保持UI响应.

当值准备就绪时,await左侧的代码将在UI线程上运行,然后您可以修改所需的任何UI属性.

SomeEvent += async (s,e) => {

   var text = await Task.Run(()=>{
    return SomeVeryExpensiveOperation();          
   });

   MyTextBox.Text = text;

}
Run Code Online (Sandbox Code Playgroud)

这里有一个更成功的例子

http://www.codearsenal.net/2012/11/csharp-5-async-and-await-example.html#.WLhBlm_ysUE