c# - 如何在c#中等待事件被处理

标签 c# .net multithreading events

假设我们有这样的代码:

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/

相关文章:

c# - Linq .Select()/.SelectMany() 自动使用第二个可选参数

.net - 当嵌入对象无法显示时如何显示一些文本?

java - 具有多个 JSON 对象的 Fullcalendar 一个 feed

python - 如何从 Cython 中的另一个线程设置 future\add 到队列的结果?

c# - 如何在 NHibernate.Linq 中缓存 .Count() 查询?

c# - WebResource.axd 和 ScriptResource.axd 加载非常慢

c# - 字符串变量的限制

c# - 我可以依赖哪些版本的 .NET Framework?

c# - 如何自动将版本号插入 AssemblyName

c# - 死锁c#解决方案