C# 异步逻辑到同步调用

标签 c# wpf visual-studio-2010 .net-4.0

我有这个

public Result SomeMethod()
{
    Popup popup = new Popup();

    popup.Closed += PopupClosedHandler;
    popup.ShowPopup();


    // have to return the result from handler.

}

void PopupClosedHandler(EventArgs<PopupEventArgs> args)
{
    Result result = args.Result;
}

我必须阻止 SomeMethod() 调用,直到调用弹出窗口并从处理程序中的 args 返回 Result 。我不知道该怎么做,甚至不知道如何寻找它。谁能引导我走向正确的方向?谢谢

最佳答案

您想使用 EventWaitHandle .

public Result SomeMethod()
{
    _doneHandler = new EventWaitHandle(false, EventResetMode.ManualReset);

    Popup popup = new Popup();

    popup.Closed += PopupClosedHandler;
    popup.ShowPopup();


    // This will wait until it is SET.  You can pass a TimeSpan 
    // so that you do not wait forever.
    _doneHandler.WaitOne();

   // Other stuff after the 'block'

}

private EventWaitHandle _doneHandler;

void PopupClosedHandler(EventArgs<PopupEventArgs> args)
{
    Result result = args.Result;

    _doneHandler.Set();
}

关于C# 异步逻辑到同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004551/

相关文章:

c# - 无法访问 Azure keyvault 值

c# - WPF 转换器命名空间

c# - 应用程序在 Dispatcher.Invoke 后卡住

c# - wpf中的ViewModel层次结构

c# - 需要帮助了解 .net ThreadPool

c# - WPF 线程 C#

sql - VS2010数据库项目用ALTER语句生成SQL03070错误

c# - ViewModel 中未调用方法 - MVVMCross

c# - 在多个显示器上获取光标位置?

c# - 用枚举的名称填充下拉列表