在C#中,BeginInvoke方法用于異步調用一個委托方法。它接受一個委托對象和一個object類型的參數作為委托方法的參數。BeginInvoke方法會在另一個線程中執行委托方法,并返回一個IAsyncResult對象,用于跟蹤異步方法的狀態。
以下是正確使用BeginInvoke方法的示例:
using System;
using System.Threading;
class Program
{
static void Main()
{
// 創建一個委托對象
Action<int> myDelegate = MyMethod;
// 調用BeginInvoke方法異步執行委托方法
IAsyncResult result = myDelegate.BeginInvoke(10, MyCallback, null);
// 在主線程中做其他事情
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Main thread is running...");
Thread.Sleep(1000);
}
// 等待異步方法執行完成
result.AsyncWaitHandle.WaitOne();
Console.WriteLine("Main thread finished.");
}
static void MyMethod(int count)
{
for (int i = 0; i < count; i++)
{
Console.WriteLine($"Async method is running {i + 1} out of {count}...");
Thread.Sleep(1000);
}
}
static void MyCallback(IAsyncResult result)
{
Console.WriteLine("Async method finished.");
}
}
在這個示例中,我們首先定義了一個委托對象myDelegate,并調用BeginInvoke方法異步執行MyMethod方法。在主線程中,我們通過循環輸出一些文本,然后等待異步方法執行完成。最后,當異步方法執行完成時,會調用MyCallback方法。
注意,使用BeginInvoke方法需要小心處理線程同步和異常處理。如果異步方法中出現異常,可以通過EndInvoke方法獲取異常并處理。另外,如果異步方法需要訪問UI線程的控件,需要使用Invoke或BeginInvoke方法來更新UI。