2011-12-21 14 views
0

私は多くのノードを持つTreeViewを持っています。私は、ノードを反復処理し、ノードを追加するか、Checkedプロパティを更新するバックグラウンドワーカーを持っています。参照としてバックグラウンドスレッドにノードを渡すと、私のバックグラウンドスレッドからノードを更新できますか?(メインスレッドで作成されたコントロールを更新するためにSyncronizationContextクラスを使用しています)ちょうど私がバックグラウンドスレッドから行うことができない/できない場合は、プログラミングの変更が多いので、私はできるかどうか不思議です。参照によってバックグラウンドスレッドからTreeViewノードを更新します。

+0

を消費する何か時間を行うにしようとした場合、[ 'Control.Invoke'方法](http://msdn.microsoftを調査し、アプリケーションが応答しなく作ることができることを覚えておいてください。 com/en-us/library/zyzhdc6b.aspx)または['Control.BeginInvoke'](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.begininvoke.aspx) 。 –

+0

これはまだ私が記事を見つけた場所を覚えていない....仮想制御 –

答えて

1

UIスレッド外のコントロールを更新することはできません。しかし、Application.Current.Dispatcher.Invoke(WPFの場合)またはControl.Invoke(WinFormsの場合)を使用してUIスレッドでいくつかの関数を呼び出すことができます。これらの操作は、メインスレッド上で実行され、あなたがここに

+0

私はメインスレッドを更新するためのSynchronizationContextクラスを使用しているに合った別の状況ですが、コードは次のようなものだ: プライベート読み取り専用のSynchronizationContextをsynContext = new AsyncOperationManager.SynchronizationContext; そして、呼び出しを行うには、必要なデータの引数を受け取り、次にこれをコールします(backgroundworkerスレッドから) syncContext.Post(delegate {OnUpdateUIControl(argsForUpdate);}); – ganders

+0

あなたのコードは、(事実を除いて、あなたのサンプル中の単語「新」を必要としない)あまりにも正常に動作する必要があります – Natalia

+0

そうそう、...そのおかげで逃しました。 – ganders

関連する問題