首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用synchronizationcontext .send返回值

是否可以使用synchronizationcontext .send返回值
EN

Stack Overflow用户
提问于 2012-11-07 07:07:35
回答 1查看 1.5K关注 0票数 2

我们需要使用SynchronizationContext通过Send返回一个值(特别是一个MessageBox DialogResult) (我们不希望通过‘Post’进行异步)。只是对语法不太确定。我们遇到了出现在主窗口后面的MessageBox的问题,这被认为是由于不能轻松地访问主窗体IWin32Window值造成的……我们正在使用这个,但老实说,我对它感到不舒服。

代码语言:javascript
复制
 DialogResult dr;
 SynchronizationContext synchContext;

 //in main forms constructor
  {
       ...
       synchContext = AsyncOperationManager.SynchronizationContext;
  }

 void workerThread( object obj, DoWorkEventArgs args)
 {

   // SynchronizationContext passed into worker thread via args
   sc.Send( delegate {dr = MessageBoxEx.Show( "Yes or no?", "Continue?",   MessageBoxButtons.OKCancel, MessageBoxIcon.Question );},null);
 }
EN

回答 1

Stack Overflow用户

发布于 2012-11-27 18:59:34

您可以将object传递给要发送的委托。

所以这是我要做的:

代码语言:javascript
复制
class DialogResultReference
{
    internal DialogResult DialogResult { get; set; }
}
class YourClass
{
    static void ShowMessageBox(object dialogResultReference)
    {
        var drr = (DialogResultReference)dialogResultReference;
        drr.DialogResult = MessageBoxEx.Show("Yes or no?", "Continue?",   MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    }

    // ... You just remove dr from the class
    SynchronizationContext synchContext;

    //in main forms constructor
    {
        ...
        synchContext = AsyncOperationManager.SynchronizationContext;
    }

    void workerThread(object obj, DoWorkEventArgs args)
    {
        var drr = new DialogResultReference();
        sc.Send(YourClass.ShowMessageBox, drr);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13260891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档