WinForm 多スレッドにまたがるコントロール アクセスを実現する方法

WinForm では、あるスレッド内で別スレッドの Control にアクセスしたい場合、Control クラスの Invoke メソッドまたは BeginInvoke メソッドを使用します。

  1. Invokeメソッドを使用します。
  1. コントロール上で実行したいコードを格納した、デリゲートを作成します。
  2. その後、コントロールへアクセスが必要なスレッドでInvokeメソッドを呼び出して、委譲をInvokeメソッドにパラメータとして渡します。
  3. 最後に、委譲の中でアクセスする必要があるコントロールのコードを実行する。
// 定义委托
delegate void UpdateControlDelegate();
// 在需要访问控件的线程中调用Invoke方法
control.Invoke(new UpdateControlDelegate(UpdateControlMethod));
// 在委托中执行需要访问的控件的代码
private void UpdateControlMethod()
{
// 在此方法中可以访问控件并执行操作
}
  1. BeginInvokeメソッドを使用する
  1. まずは、コントロールで実行したいコードを含むデリゲートを作成します。
  2. その後、コントロールにアクセスする必要があるスレッドでBeginInvokeメソッドを呼び出し、BeginInvokeメソッドにデリゲートを引数として渡します。
  3. 最終的に委任先でアクセスする必要のあるコントロールのコードを実行します。
// 定义委托
delegate void UpdateControlDelegate();
// 在需要访问控件的线程中调用BeginInvoke方法
control.BeginInvoke(new UpdateControlDelegate(UpdateControlMethod));
// 在委托中执行需要访问的控件的代码
private void UpdateControlMethod()
{
// 在此方法中可以访问控件并执行操作
}

InvokeメソッドとBeginInvokeメソッドを使うことで、別スレッドからコントロールにアクセスして操作を実行できます。

广告
広告は10秒後に閉じます。
bannerAds
bannerAds