0

BackgroundWorker IsBusy のときに新しいプロセスを開始しようとしています。

Global.asax:

BackgroundWorker thread;
protected void Application_Start(object sender, EventArgs e)
{
     StartThread();
}
protected void StartThread()
{
     thread = new BackgroundWorker();
     thread.DoWork += new DoWorkEventHandler(DoWork);
     thread.RunWorkerAsync();
}
private void DoWork(object sender, DoWorkEventArgs e)
{
     Process p = new Process();
     p.StartInfo.FileName = "exe.exe";
     p.Start();
     p.WaitForExit(10000);
}

しかし、何も起こりませんでした。また、例外は発生しませんでした。p.Start() 行にブレークポイントを挿入しました。プロセスが開始されなかったことを除いて、すべて正常に動作します。

この理由は何でしょうか?また、これに Thread クラスを使用しようとしましたが、同じ結果が得られました。

4

1 に答える 1

0

BackgroundWorkerDoWorkデリゲート内から新しいスレッドを開始しています。イベントを発生させたらDoWork、UI スレッドから新しいプロセスを開始してみませんか。これは、スレッドの安全性と同時実行性の点ではるかに優れています。これは、問題の根本的な原因になる可能性もあります。

于 2012-04-06T08:07:11.907 に答える