c# WPF多线程不能从Dispatcher返回实际值.VS2013中的BeginInvoke
本文关键字:VS2013 中的 BeginInvoke 返回 多线程 WPF 不能 Dispatcher | 更新日期: 2023-09-27 18:19:14
我想从c# VS2013 WPF中获得一个线程的返回值。
代码是:
int t = 0;
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
t = myFucntion(myObject) // if I do not use dispatcher, myObject cannot be accessed by the calling thread.
));
return t;
为什么t总是0而不返回实际值?这里的解决方案对我不起作用。
WPF Dispatcher调用返回值始终为空
Application.Current.Dispatcher.Invoke((() =>
{
t = myFunction(myObject));
}));
return t;
但是,t没有赋值给myFunction返回的实际值
Dispatcher.BeginInvoke
是异步的。它将在委托排队到消息循环后立即返回:
在指定的时间异步执行指定委托Dispatcher关联的线程的优先级。
这意味着您有一个竞争条件,您甚至可能看到t
实际上包含期望的值,如果您运行它足够多次的话。
为了消除这种情况,如果您想等待直到委托在消息循环中运行,请使用Dispatcher.Invoke
代替:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(() => t = myFunction()));