我正在使用WPF,我的UI界面上有一个按钮。
当用户单击它时,我有一个for循环,会在一个新线程上运行一个新方法,使用AutoResetEvent。
在这个新线程上的方法中,我使用了一个标签,我们称之为lblStatus。我想在不在UI上的这个线程上更新这个标签。使用WPF,我必须使用Dispatcher.Invoke。
以下是我的代码示例:
此外,但这也不起作用。有什么想法?
当用户单击它时,我有一个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();
}
程序在这里停止了。它没有改变标签的内容,返回到我的用户界面,但阻塞了它。
我已经尝试过
lblStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new LblStatusThreadCheck(lblStatusThreadCheck), "Scanning...");
此外,但这也不起作用。有什么想法?