我正在使用 wpf,我的用户界面上有一个按钮。
当用户单击它时,我有一个 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...");
也一样,但这也不起作用。有任何想法吗?