2

SynchronizationContext を使用して、Send を介して値 (具体的には MessageBox DialogResult) を返す必要があります (「Post」を介した非同期は必要ありません)。構文がわからないだけです。メイン フォームの IWin32Window 値に簡単にアクセスできないことが原因と考えられるメイン ウィンドウの背後に MessageBox が表示されるという問題がありました...これを使用していますが、正直言って不快です。

 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);
 }
4

1 に答える 1

0

objectSend に渡すデリゲートに を渡すことができます。

だからここに私がすることがあります:

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);
    }
}
于 2012-11-27T10:59:34.053 に答える