コンソールアプリケーションで、別TaskからProcess.Startで処理が止まる
.NETフレームワークは4.0です。
コンソールアプリケーションで以下のメソッドを実行すると、Convert内のProcess.Startで処理が停止してしまいます(例外の発生ではなく、次に進まなくなる)。
また、Process.Startでの外部アプリケーションの呼び出しには成功していて、タスクマネージャから確認すると処理も終わっています。
このメソッドをWindowsFormアプリケーションから呼び出すと、正常に終了します。
public CancellationTokenSource ConvertAsync<T>(object obj,string[] files,Listener listener){
var cancellation = new CancellationTokenSource();
var task = new Task(
()=>{
try{
Task convertedTask = null;
Action<object> action = new Action<object>((obj) => {
try{
listener.oneFile(obj);
return;
} catch (Exception ex2) {
Debug.WriteLine(ex2);
return;
}});
foreach (var file in files) {
if(cancellation.IsCancellationRequested)return;
Debug.WriteLine("before:"+file);
var converted =Convert(obj,file);/* <-ここでProcess.Start()呼び出し*/
Debug.WriteLine("after:"+converted);
if(converted==null)break;
if(convertedTask==null){
convertedTask = new Task(action,ab,cancellation.Token);
convertedTask.Start();
}else{
convertedTask = convertedTask.ContinueWith((arg) => action(converted),cancellation.Token);
}
}
if(convertedTask!=null)convertedTask.Wait();
listener.allDone();
}catch(Exception ex){
Debug.WriteLine(ex);
return;
}
},cancellation.Token);
task.Start();
return cancellation;
}
以上、ご教授いただければ幸いです。よろしくお願いいたします。