2012-04-06 8 views
0

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

の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クラスを使用しようとしましたが、同じ結果が得られました。

+0

['Process.Start()'メソッドの 'bool'結果を確認する必要があります(http://msdn.microsoft.com/en-us/library/e8zac0ca(v=80).aspx )。 –

+1

Process.Start()の結果はTRUEと等しくなります –

答えて

0

BackgroundWorkerDoWork代理人の中から新しいスレッドを開始しています。 DoWorkイベントを起動するときは、UIスレッドから新しいプロセスを開始してください。これは、スレッドの安全性と並行性の面ではるかに優れています。これは、あなたの問題の根本的な原因となる可能性があります。

+0

私が開始したいプロセスは常にサーバー上で動作しなければなりません。 –