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