|
分類:[C#]
2012/10/23(Tue) 13:45:21 編集(投稿者)
スレッド操作とリストビュー
期待する動作は、 下記(1)の直後の受信データが、スレッド3で充分待つ間にスレッド2のInvokeで リストビューに書き込まれ、(4)で読むことができるということです。 実際には、スレッド3が終わるまで、スレッド2の動作はブロックされるようです。 スレッド2の優先度を最大にしても変化はありませんでした。 スレッド3が優先されるのはなぜでしょうか。
// スレッド1 private void thdmethod1() { // 受信データをバッファ2に転送する }
// スレッド2 private void thdmethod2() { while ( true ) { if (条件:バッファ2にデータあり){ // dlgint はリストビューに書き込むデリゲート Invoke(dlgint, length); } Thread.Sleep(200); } }
// スレッド3 private void thdmethod3() { Thread.Sleep(5000); // 5秒待つ }
// フォームクラス上での処理 thd1.IsBackground = true; thd1.Start() thd2.IsBackground = true; thd2.Start()
private void button2_Click(....){ // ここで送信を実行する。その後1秒以内には応答を完了しているはず。 SendFunc(........);------------(1) thd3.IsBackground = true; thd3.Start(); ---------------(2) thd3.Join(); ------------(3) if (条件:リストビュー内の値を読む){ ------(4) } }
|