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

当你从一个线程调用 MessageBox 时,除了 UI 线程之外,它永远不会出现。

处理此问题的正确方法是从您在另一个线程上调用的方法中引发一个事件,并让 UI 线程订阅它。在事件处理程序中,您可以编写代码来显示 MessageBox。

于 2012-09-20T15:13:23.180 回答