2009-04-08 10 views
1

私のスレッドでGUIの問題に悩まされています。私のスレッドがコールバックを使用してコードを実行する(そして失敗する)代わりに、メインフォーム/スレッドがデータを受け取るようにFIFOを作成する方法はありますか?FIFOをwinform with C#

GUI問題となっている問題 - >Thread exception on SelectedNode = .Nodes[0]

答えて

1

WinformコントロールのBeginInvokeは、スレッド間で呼び出しを行うために、FIFOのWindowのメッセージキューを使用します。

+0

実際、アイテムが誤ってジャンプしてキューを効果的にブロックできる例を見てきました。私は「方法」を覚えていないが、それは複雑ではなかった。 –

+0

メッセージはキューの先頭に置くことができます(どのAPIであるかはわかりませんが)。メッセージ処理をブロックするには、メッセージ処理自体がブロックされ、メッセージをキューに入れないでください。 – Richard

0

メインフォーム(または任意のコントロール)のハンドルがある場合は、Control.Invoke/Control.BeginInvokeを使用できます。

あなたがControlインスタンスを配るしたくない場合は、(任意のコントロールがそれを行う、またはラップControlは、呼び出し元キャストを防止することを独自のクラスを記述します)外部コードにISynchronizeInvokeインスタンスを与えることができます。次に、呼び出し元はこれを使用してメソッドを実行できます。

最後に、イベントの使用を検討してください。実行中のコードはUIが処理するイベントを発生させます。 UIはControl.Invokeをローカルに呼び出してデータを処理することができます。

+0

ありがとう、私はISynchronizeInvokeを試してみます。私がATMを持っている問題はcontrol.invokeであるhttp://stackoverflow.com/questions/729359/thread-exception-on-selectednode-nodes0/729377#729377 –

+0

私はこれが関係しているのか疑問です。しかし、あなたは他の投稿の詳細についての嘆願を無視している... –