作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何从 TPL 任务更新 WPF 控件?
很好,所以我尝试了一些场景来使用 Dispatcher,但无论如何它都给出了错误。我需要帮助!
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//Application.Current.Dispatcher.Invoke((Action)MyInit);
backgroundDBTask = Task.Factory.StartNew(() =>
{
DoSomething1();
}, TaskCreationOptions.LongRunning);
backgroundDBTask.ContinueWith((t) =>
{
// ... UI update work here ...
},
TaskScheduler.FromCurrentSynchronizationContext());
}
void DoSomething1()
{
// MyInit();
int number = 0;
while (true)
{
if (state)
{
Thread.Sleep(1000);
Console.WriteLine("Begin second task... {0}", number++);
// mostCommonWords = GetMostCommonWords(words) + string.Format(" Begin second task... {0}", number++);
textBox2.Text = (number++).ToString(); // Gives the error
Dispatcher.BeginInvoke(); // How it should be ?
}
}
}
谢谢!
最佳答案
您需要将执行您的工作的委托(delegate)传递给 BeginInvoke
。BeginInvoke
将在 UI 线程上异步运行此委托(delegate)。
例如:
Dispatcher.BeginInvoke(new Action(delegate {
textBox2.Text = number.ToString();
}));
关于.net - 如何从 TPL 任务更新 WPF 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726697/
我是一名优秀的程序员,十分优秀!