前提・実現したいこと
Form上のラベルで処理用クラスでの処理状況を更新したい
発生している問題・エラーメッセージ
処理用クラスで重い処理(fs_Process.Test();)を行っているが、そのクラスでの処理中はthread2内のwhileがループせず止まってしまう状況です
処理用クラスでの処理状況はDispStringClass.dispStringに送り、それを表示しようかと思いましたが、更新されないので、デバッグすると(fs_Process.Test();)完了するまでthread2が止まっているおり、SetLabelのメゾットが走らない状況です
独学で勉強している為、基礎や根本的な部分が抜けていると思いますが、教えていただければと思います
該当のソースコード
C#
1class main:Form 2{ 3 private void Test() 4 { 5 try 6 { 7 thread2 = new Thread(new ThreadStart(() => 8 { 9 while (true) 10 { 11 Invoke(new DispDISP(SetLabel), DispStringClass.dispString()); 12 } 13 })); 14 15 thread2.Start(); 16 fs_Process = new ibmProcess(); 17 fs_Process.Test(); 18 19 thread2.Abort(); 20 thread2.Join(); 21 } 22 catch { } 23 } 24 25 delegate void DispDISP(string strDisp); 26 27 private void SetLabel(string strDisp) 28 { 29 DispLabel.Text = strDisp; 30 } 31} 32 33class ibmProcess 34{ 35 public bool Test() 36 { 37 edpAccess.SessionM_ACon(); 38 edpAccess.SessionACon(); 39 40 DispStringClass.dispString = "処理中1-1"; 41 edpAccess.oiM.WaitForInputReady(5000); 42 ********************重い処理 43 44 DispStringClass.dispString = "処理中1-2"; 45 edpAccess.oiM.WaitForInputReady(5000); 46 ********************重い処理 47 48 DispStringClass.dispString = "処理中1-3"; 49 edpAccess.oiM.WaitForInputReady(5000); 50 ********************重い処理 51 52 edpAccess.psM.SendKeys("[enter]", 1, 1); 53 edpAccess.oiM.WaitForInputReady(5000); 54 55 string stateCheck = edpAccess.psA.GetText(5, 40, 2); 56 int c = 0; 57 58 do 59 { 60 System.Threading.Thread.Sleep(1000); 61 62 if (stateCheck == "OK") { break; } 63 edpAccess.psA.SendKeys("[enter]", 1, 1); 64 edpAccess.oiA.WaitForInputReady(5000); 65 c++; 66 if (c == 40) 67 { 68 return false; 69 } 70 //ステータス確認 71 stateCheck = edpAccess.psA.GetText(5, 40, 2); 72 73 } while (stateCheck != "OK"); 74 75 return true; 76 } 77} 78 79 80 81
試したこと
Application.DoEventsなど試しましたが駄目でした
ibmProcessではIBMのPCCOMMというエミュレーターを操作しております
補足情報(FW/ツールのバージョンなど)
導入PCがイントラネット上のWin7でNetFramework 3.5 しか使えません。
回答1件
あなたの回答
tips
プレビュー