我使用wpf,我的用户界面上有一个按钮。Dispatcher.Invoke从一个新的线程锁定我的UI
当用户点击它,我有一个for循环运行一个新的方法,在一个新的线程使用autoresetevent。
在那个新线程的方法中,我使用了一个标签,我们称它为lblStatus。我想在这个线程上更新那个不在UI上的标签。使用wpf,我必须使用Dispatcher.Invoke。
这里是我的代码示例:
Thread thread= new Thread(StartLooking);
thread.Start();
_waitHandle.WaitOne();
private void StartLooking(object value)
{
if (lblStatus.Dispatcher.Thread == Thread.CurrentThread)
{
lblStatus.Content = "Scanning>...";
}
else
{
lblStatus.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => lblStatus.Content = "Scanning>>>>>"));
}
_waitHandle.Set();
}
程序刚刚在这里结束。它不会更改标签的内容,它会返回到我的UI,但会阻止它。
我试过
lblStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new LblStatusThreadCheck(lblStatusThreadCheck), "Scanning...");
为好,但这是不是也工作。有任何想法吗?
你有没有想过使用数据绑定? – GETah 2011-12-15 23:01:17