現在、WindowsFormアプリを作成しています。その処理の中で約1秒ほどかかる外部のアプリを10~1000回ほど呼び出すのですがその際、待機カーソルが表示され、通常のカーソルと待機カーソルが交互にあわられチカチカしてしまっているので、常に通常カーソルが表示されている状態にしたいと思っています。
自分が調べたところによるとその待機カーソルが呼ばれる処理を行っている間メインスレッドで生成されたメッセージループが待機状態となり、待機カーソルが表示されるということがわかったのですが、どのように常にメッセージを処理し続ければいいのかわからずに困っています。
C#でApplication.DoEvent()という関数を使ってメッセージループをまわしてみたのですが、待機カーソルが少し表示されなくなりましたが常に通常カーソルが表示されるといった感じにはなりませんでした。
約1秒ほどの長い処理を何回も呼んでも常に通常カーソルを表示させるにはどのようにしたらようでしょうか?知っている方がいましたらご教授ください。
以下が外部アプリ(C++)を呼んだ際にDoEventをはさんだ処理です。
lang
1 2//FormLoadイベントAで下記メソッドを呼び出す 3private async void Form1_Load(object sender,EventArgs e) 4{ 5 await AsyncClient();//メソッドBの呼び出し 6} 7 8 9 10//外部アプリを10~1000回呼ぶメソッドB 11public async Task<int> AsyncClient() 12{ 13 //いろいろな処理(省略)... 14 15 while(dataReader.Read())//DBのレコード数分10~1000回くらまわします 16 { 17 await CallProcessMethod();//外部プロセスを呼ぶメソッド 18 } 19} 20 21 22//外部アプリを呼ぶメソッドC 23 24public static async Task<T> CallProcessMethod() 25{ 26var process_1 = new Process() 27 { 28 StartInfo = 29 { 30 FileName = "外部アプリ.exe", 31 Arguments = xxxxxxxx 32 } 33 }; 34 35 await Task.Factory.StartNew(() => 36 { 37 Application.DoEvents(); 38 }); 39 40 await Task.Factory.StartNew(() => process_1.Start()); 41 await Task.Factory.StartNew(() => process_1.WaitForExit());//約1秒ほどかかるC++の"外部アプリ.exe"をここで起動 42 await Task.Factory.StartNew(() => process_1.Dispose()); 43 44 await Task.Factory.StartNew(() => 45 { 46 Application.DoEvents(); 47 }); 48}
回答3件
あなたの回答
tips
プレビュー