gpt4 book ai didi

c# - 为什么使用 Dispatcher.CurrentDispatcher.BeginInvoke 不更新我的 GUI 而使用 BeginInvoke 却可以?

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:07 24 4
gpt4 key购买 nike

我对 Dispatcher.CurrentDispatcher.BeginInvokeBeginInvoke 之间的区别感到困惑

我有以下部分代码不起作用,UpdateCounts 方法中的代码被忽略了:

private void Start()
{
_testResults = new TestResults(ModelNameTextBox.Text);
_timer = new System.Threading.Timer(UpdateCounts, null, 0, 500);
}

private void UpdateCounts(object info)
{
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
PassCountLabel.Text = _testResults.PassedCount.ToString();
RequestCountLabel.Text = _testResults.RequestedCount.ToString();
}));
}

但是一旦删除 Dispatcher.CurrentDispatcher,它就可以正常工作了:

private void UpdateCounts(object info)
{
BeginInvoke(new Action(() =>
{
PassCountLabel.Text = _testResults.PassedCount.ToString();
RequestCountLabel.Text = _testResults.RequestedCount.ToString();
}));
}

最佳答案

Dispatcher.CurrentDispatcher.BeginInvoke 仅当您从 UI 线程调用它时才会起作用,否则它会调用当前线程。

您必须使用 Application.Current.Dispatcher 调用 UI 线程

关于c# - 为什么使用 Dispatcher.CurrentDispatcher.BeginInvoke 不更新我的 GUI 而使用 BeginInvoke 却可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com