私はUIとして機能し、外部exeを実行するC#フォームアプリケーションを持っています。外部のexeが実行を終了するまで、プログレスバーを増分したい。だから私は、次のコードを持っている:スレッドが終了するのを待つ間にプログレスバーが進まない
// create thread and Start external process
Thread MyNewThread = new Thread(new ThreadStart(startmodule));
MyNewThread.Start();
do
{
if (progressBar1.Value < 100)
{
progressBar1.Value++;
}
} while (MyNewThread.IsAlive);
label5.Text = "Status: Done";
// startmodule()
void startmodule()
{
ProcessObj = new Process();
ProcessObj.StartInfo.FileName = ApplicationPath;
ProcessObj.StartInfo.Arguments = ApplicationArguments;
ProcessObj.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ProcessObj.Start();
}
は、その代わりに、瞬時にバーをいっぱいにし、「完了」のメッセージが、外部exeファイル(APPPATH)はまだバックグラウンドで実行されますと表示されます。
いくつかのアイデアを投稿してください。私は何が間違っているのか分からない。あなたの時間をありがとう。
ティムズはここで徘徊しています。あなたのループには実際の進歩に結びつくものは何もないので、ループはできるだけ早く実行されるので、なぜ100%に瞬時にジャンプするように見えますか? BackgroundWorkerは、ReportProgressメソッドをサポートしているため、主スレッドに非同期に進行状況を通知できるため、BackgroundWorkerを使用することができます。そして実際、あなたのバックグラウンドスレッドは、おそらくそれがどれだけ成し遂げられたかを知るために装備されています。 –
今、私はあなたが「あなたのスタート・モジュール内のプログレス・バーを増やすことができるかもしれません」という意味を理解するのに苦労しています。 –
闘争はもう終了しません。 – Tim