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,但很高兴您解决了它。