C#のBeginInvokeメソッドの使い方は何ですか?
C#において、BeginInvokeはデリゲート型のメンバーであり、デリゲートを非同期で呼び出すために使用されます。使用方法は以下の通りです:
- 最初に、呼び出すメソッドを指定して、デリゲートインスタンスを作成します。
- 使用委託対象のBeginInvokeメソッドを使用して非同期呼び出しを開始します。このメソッドは、呼び出すメソッドの引数とコールバック関数を受け入れます。
- コールバック関数内では、非同期呼び出しの結果と状態にアクセスすることができます。
以下是使用BeginInvoke的示例代码:
public class Example
{
public delegate void MyDelegate(string message);
public void PrintMessage(string message)
{
Console.WriteLine(message);
}
public void StartAsync()
{
MyDelegate myDelegate = new MyDelegate(PrintMessage);
myDelegate.BeginInvoke("Hello, World!", PrintCompleted, null);
}
public void PrintCompleted(IAsyncResult result)
{
// 处理异步调用的结果
MyDelegate myDelegate = (MyDelegate)((AsyncResult)result).AsyncDelegate;
myDelegate.EndInvoke(result);
}
}
public class Program
{
public static void Main()
{
Example example = new Example();
example.StartAsync();
// 等待异步调用完成
Console.ReadLine();
}
}
上記の例では、最初に名前がMyDelegateの委任タイプが定義され、文字列パラメーターを受け入れます。そして、メッセージをプリントするPrintMessageメソッドが定義されます。StartAsyncメソッドでは、MyDelegateの委任インスタンスが作成され、BeginInvokeメソッドを使用してPrintMessageメソッドが非同期で呼び出されます。PrintCompletedコールバック関数では、非同期呼び出しの結果を処理できます。最後に、MainメソッドでExampleインスタンスを作成し、StartAsyncメソッドを呼び出し、次にConsole.ReadLineメソッドで非同期呼び出しが完了するのを待ちます。
BeginInvokeメソッドを使用する際には、リソースの正しい解放を確保するために、EndInvokeメソッドを手動で呼び出す必要があります。