我有一个运行外部代码的应用程序,每次我出于调试目的启动它时,都不得不将调试器附加到该进程中。
我正在使用Debug.Launch()
方法,但是有时我想将该程序附加到当前VS实例,因此无论如何我都需要手动执行。但是,当我附加该进程时,调试器窗口仍然存在,因此我想摆脱它。但是由于该方法无论如何都无法等待,因此我很难杀死它。我已经尝试过这样的事情:
private void CheckForDebugger()
{
var source = new CancellationTokenSource(TimeSpan.FromSeconds(30));
var token = source.Token;
var debuggerTask = Task.Run(() =>
{
Debugger.Launch();
}, token);
var loopTask = Task.Run(async () =>
{
while (!Debugger.IsAttached) await Task.Delay(200);
}, token);
Task.WaitAny(debuggerTask, loopTask);
source.Cancel();
}
但是我没有地方在debuggerTask
中插入对该令牌的检查,我试图杀死该任务/线程,但也没有成功。