現在2画面作っており、一つはボタンを押すと選択されたエクセルを開く処理の画面とそのオープンの処理のに時間が掛かるため、プログレスバーの画面を作り、そちらを10秒を上限に更新していき、オープン処理が終わったら、Endと言うメソッドを呼び出して、プログレスバー側の画面のクローズ処理を行いたいと思っております。
Excel = new ExcelLiB(); _excelLoad = new FormExcelLoading(); _excelLoad.Show(); _excelLoad.Start(); // タイマーをスタートさせる処理で、タイマーの方でプログレスバーの値を1ずつ増やしています。 Excel.Open(path);//エクセルのオープン処理(ここで時間が掛かっているため画面が止まって見えています) _excelLoad.End();
一応、別にテストプロジェクトを作って、時間のかかるエクセルオープンの箇所をタイマーで10秒経ったら処理するようにして確認した上で、実際のエクセルオープンの箇所(上記※箇所)の前後に入れたところ、プログレスバーのメモリが動かず、エクセルが開いた後のEndメソッドにすぐ行ってしまう感じの動きでした。
動き的にThread.Sleep的な感じで止まっている様でしたので、
Thread thread = new Thread(new ThreadStart(() => { _form2 = new Form2(); _form2.Show(); _form2.Start(); })); thread.Start();
と言う風に別スレッドでフォームを開いたつもりで
※Excel.Open(path); thread = new Thread(new ThreadStart(() => { _form2.End(); })); thread.Start();
上記で閉じる処理を走らせようと思ったのですが、2~3時間調べながらやっているのですが、全く上手く行っておらず、どのようにした方が良いのか教えて頂けないでしょうか。
再度まとめると下記2点になります。
・エクセルのオープン処理時(Thread.Sleep的な止まっている間)に画面が止まるため、別フォームにプログレスバーを用意してそちらを表示。
・エクセルによって開くタイミングが違うため、そちらはタイマーを使っておおよそ15秒になったら目盛りが満タンになるようにして、エクセルのオープン処理が終わったらEndメソッドを使って、クローズ処理(プログレスバーの目盛りを最後まで行ったように見せて閉じる)を走らせる。
スレッドやタスククラスを使って簡単に出来るかと思ったのですが、全く前に進めておりません。
参考になるサイトでも構いませんので、教えて頂きたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー