我想在c#中創建一個windows應用程序,它將同時調用多個線程的方法。並在Windows窗體屏幕上報告每個線程的開始和完成情況。同時調用多個線程的方法並報告每個線程的進度
要調用的方法需要兩個參數並返回一個對象。
請幫忙。
迴應將不勝感激。
在此先感謝。
我想在c#中創建一個windows應用程序,它將同時調用多個線程的方法。並在Windows窗體屏幕上報告每個線程的開始和完成情況。同時調用多個線程的方法並報告每個線程的進度
要調用的方法需要兩個參數並返回一個對象。
請幫忙。
迴應將不勝感激。
在此先感謝。
從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,它們都是一個接一個的。你可以讓它們都有相同的回調,或者它們可以有不同的回調。隨你便。
希望這會有所幫助!
我應該注意 - BeginInvoke立即返回;它不會等待你開始完成的線程。 – Ord 2011-06-16 18:43:34
這是一項家庭作業嗎? – 2011-06-16 17:56:50