2011-06-16 30 views
0

我想在c#中創建一個windows應用程序,它將同時調用多個線程的方法。並在Windows窗體屏幕上報告每個線程的開始和完成情況。同時調用多個線程的方法並報告每個線程的進度

要調用的方法需要兩個參數並返回一個對象。

請幫忙。

迴應將不勝感激。

在此先感謝。

+0

這是一項家庭作業嗎? – 2011-06-16 17:56:50

回答

1

http://www.albahari.com/threading/#_Entering_the_Thread_Pool_via_TPL

static void Main() 
{ 
    Func<string, int> method = Work; 
    method.BeginInvoke ("test", Done, method); 
    // ... 
    // 
} 

static int Work (string s) { return s.Length; } 

static void Done (IAsyncResult cookie) 
{ 
    var target = (Func<string, int>) cookie.AsyncState; 
    int result = target.EndInvoke (cookie); 
    Console.WriteLine ("String length is: " + result); 
} 

基本上, 「工作」 就是要在另一個線程運行的方法。 「完成」是您在「工作」完成時要調用的方法 - 您將在此處放置狀態報告代碼。 method.BeginInvoke採用與Work相同的參數,另外還有兩個參數:回調函數和狀態信息,它們可以是任何你想要的。回調函數需要一個參數:一個IAsyncResult。您可以通過獲取IAsyncResult的AsyncState來訪問您傳入的狀態信息。在上面的例子中,「target」與「method」是指相同的東西。這很有用 - 這意味着你可以在方法/目標上調用「EndInvoke」,它會給你你需要的返回值。 「結果」是「工作」的返回值。

如果您需要多個線程,只需要有多個委託(如上面示例中的「method」)和BeginInvoke,它們都是一個接一個的。你可以讓它們都有相同的回調,或者它們可以有不同的回調。隨你便。

希望這會有所幫助!

+0

我應該注意 - BeginInvoke立即返回;它不會等待你開始完成的線程。 – Ord 2011-06-16 18:43:34

相關問題