假设我们有这样的代码:
public class MyProcess
{
private Process _process;
public event EventHandler OnFinish;
public MyProcess(string pathToExe)
{
_process = new Process();
_process.StartInfo.FileName = pathToExe;
}
public int Start()
{
_process.Exited += _processExited;
_process.Start();
return _process.Id;
}
public void Stop()
{
_process.Stop();
}
private void _processExited(object sender, EventArgs e)
{
OnFinish?.Invoke();
}
}
public class MyProgram
{
private static int stoppedProcs = 0;
public static void Main(string[] args)
{
var proc = new MyProcess("foo.exe");
proc.OnFinish += proc_OnFinish;
proc.Start();
proc.Stop();
//Wait here to display 1 instead of 0
Console.WriteLine(stoppedProcs);
}
private static void proc_OnFinish(object sender, EventArgs e)
{
stoppedProcs++;
}
}
我创建并启动进程。然后我想停止它并仅在处理事件后继续。问题是我自己不调用事件,因为它是由操作系统完成的。我如何知道事件处理程序已完成?
最佳答案
谢谢大家回答我的问题。
根据 @Fildor 使用 ManualResetEvent
public class MyProgram
{
private static int stoppedProcs = 0;
private static ManualResetEvent mre = new ManualResetEvent(false);
public static void Main(string[] args)
{
var proc = new MyProcess("foo.exe");
proc.OnFinish += proc_OnFinish;
proc.Start();
proc.Stop();
//Wait here to display 1 instead of 0
mre.WaitOne();
mre.Reset();
Console.WriteLine(stoppedProcs);
}
private static void proc_OnFinish(object sender, EventArgs e)
{
stoppedProcs++;
mre.Set();
}
}
关于c# - 如何在c#中等待事件被处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845032/