MethodInvokerでクロススレッドUIアクセスを解決する

C#において、別スレッドで実行中のコントロールへのアクセスを行う場合、MethodInvokerを利用することでスレッド間でのコントロールアクセスに関する問題を解決できる。MethodInvokerとは、メソッドを呼び出すために用いることができるデリゲートである。

以下にメソッドインボーカを使用してスレッド間コントロールアクセス問題を解決する方法を示すサンプルコードを記載します。

private void btnUpdate_Click(object sender, EventArgs e)
{
// 创建一个MethodInvoker委托,将需要在另一个线程中执行的方法放入委托中
MethodInvoker invoker = new MethodInvoker(UpdateLabel);
// 使用Invoke方法在控件的创建线程上同步执行委托
lblResult.Invoke(invoker);
}
private void UpdateLabel()
{
// 在这个方法中可以安全地访问控件
lblResult.Text = "Updated!";
}

上の例では、btnUpdate_Clickメソッド内でMethodInvokerデリゲートが作成され、別のスレッドで実行する必要があるメソッドUpdateLabelがデリゲートに格納されています。そしてInvokeメソッドを使用して、コントロールが作成されたスレッド上でデリゲートを同期的に実行します。UpdateLabelメソッド内では、コントロールに安全にアクセスしてそのテキストを更新することができます。

MethodInvokerとInvokeメソッドを使用することで、クロススレッドでコントロールにアクセスする際にスレッドアクセス例外が発生しないことを保証し、コントロールの状態を正しく更新することが可能になります。

bannerAds