2012-09-20 44 views
1

鑑於爲什麼messagebox從不顯示?

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)

回答

5

從線程調用MessageBox時,除了UI線程之外,它永遠不會顯示。

處理此問題的正確方法是從您在另一個線程上調用的方法引發事件,並讓UI線程訂閱它。在事件處理程序中,您可以編寫代碼來顯示MessageBox。

+0

當我使用Task.Factory.FromAsync時,還需要調用'EndInvoke'嗎? –