私のスレッドでGUIの問題に悩まされています。私のスレッドがコールバックを使用してコードを実行する(そして失敗する)代わりに、メインフォーム/スレッドがデータを受け取るようにFIFOを作成する方法はありますか?FIFOをwinform with C#
GUI問題となっている問題 - >Thread exception on SelectedNode = .Nodes[0]
私のスレッドでGUIの問題に悩まされています。私のスレッドがコールバックを使用してコードを実行する(そして失敗する)代わりに、メインフォーム/スレッドがデータを受け取るようにFIFOを作成する方法はありますか?FIFOをwinform with C#
GUI問題となっている問題 - >Thread exception on SelectedNode = .Nodes[0]
使用SynchronizationContextPost
/Send
にUIスレッドに "通話"。
WinformコントロールのBeginInvokeは、スレッド間で呼び出しを行うために、FIFOのWindowのメッセージキューを使用します。
メインフォーム(または任意のコントロール)のハンドルがある場合は、Control.Invoke
/Control.BeginInvoke
を使用できます。
あなたがControl
インスタンスを配るしたくない場合は、(任意のコントロールがそれを行う、またはラップControl
は、呼び出し元キャストを防止することを独自のクラスを記述します)外部コードにISynchronizeInvoke
インスタンスを与えることができます。次に、呼び出し元はこれを使用してメソッドを実行できます。
最後に、イベントの使用を検討してください。実行中のコードはUIが処理するイベントを発生させます。 UIはControl.Invoke
をローカルに呼び出してデータを処理することができます。
ありがとう、私はISynchronizeInvokeを試してみます。私がATMを持っている問題はcontrol.invokeであるhttp://stackoverflow.com/questions/729359/thread-exception-on-selectednode-nodes0/729377#729377 –
私はこれが関係しているのか疑問です。しかし、あなたは他の投稿の詳細についての嘆願を無視している... –
実際、アイテムが誤ってジャンプしてキューを効果的にブロックできる例を見てきました。私は「方法」を覚えていないが、それは複雑ではなかった。 –
メッセージはキューの先頭に置くことができます(どのAPIであるかはわかりませんが)。メッセージ処理をブロックするには、メッセージ処理自体がブロックされ、メッセージをキューに入れないでください。 – Richard