1

与えられた

    static void Main()
    {
        Form f = new Form();
        f.Show();
        Action a = () => MessageBox.Show("hi");            
        Task.Factory.FromAsync(f.BeginInvoke(a), (ar) => a.EndInvoke(ar));
        Console.Read();
    }
  • メッセージボックスに「こんにちは」と表示されることはありません。
  • 次に、Async から Task.Factory を使用する場合、 EndInvoke(ar)を呼び出す必要がありますか?
4

1 に答える 1

5

UI スレッド以外のスレッドから MessageBox を呼び出すと、表示されません。

これを処理する正しい方法は、別のスレッドで呼び出しているメソッドからイベントを発生させ、UI スレッドにサブスクライブさせることです。イベント ハンドラでは、MessageBox を表示するコードを記述できます。

于 2012-09-20T15:13:23.180 に答える