C# 如何从任务中正确获取函数返回值?
我尝试异步调用函数并等待其返回值,但没有成功C# 如何从任务中正确获取函数返回值?,c#,wpf,task,C#,Wpf,Task,我尝试异步调用函数并等待其返回值,但没有成功 bool result = Task.Factory.StartNew(() => { return StupidFunction(someParameter); }).Result; if (result) MessageBox.Show("Yes"); else MessageBox.Show("No"); 其中愚蠢的函数是一个公共静态布尔函数 应用程序将永远挂起。已通过解决 Task.Run(() => {
bool result = Task.Factory.StartNew(() => { return StupidFunction(someParameter); }).Result;
if (result)
MessageBox.Show("Yes");
else
MessageBox.Show("No");
其中愚蠢的函数是一个公共静态布尔函数
应用程序将永远挂起。已通过解决
Task.Run(() =>
{
if (StupidFunction(someParameter))
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => MessageBox.Show(Application.Current.MainWindow, "yes")));
else
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => MessageBox.Show(Application.Current.MainWindow, "no")));
});
那么StupdFunction做什么呢?可能重复的是您正在寻找的bool result=wait Task.Factory…?除非StupdFunction不返回,或者如果StupdFunction对UI做了一些操作,否则您发布的代码将正常工作。顺便说一句,您不是异步调用此函数。仅仅启动一个任务并不能使它异步,因为在最后使用.Result,它会使它在那里等待,直到得到结果。为什么不使用async/await模式并将StupdFunction标记为async并等待它?这只适用于WPF应用程序,从OP中不清楚这是WPF还是Winforms,但很高兴您解决了它。