c# - 如何循环以事件结束的流程? (c#.NET)

标签 c# events loops stack

我有一个进程在完成时调用一个事件。

void DoProcess()
{
    ...
    ...
    // Call finished event
    OnFinished();
}

我想多次运行这个过程。

我的第一个想法是在每次调用“完成”事件时记忆起该过程。

void obj_Finished()
{
    DoProcess();        
}

这是否意味着堆栈会越来越大?因为“完成”事件会调用它自己,所以会调用“完成”事件等...

我可以通过某种方式使用另一个线程来避免这个问题吗?

我可以使用更好的设计模式吗?

我希望代码非常高效,但是,我确实喜欢使用事件 :)

最佳答案

假设使用 WinForms 或 WPF:使用 BackgroundWorker .

您可以在一个简单的循环中运行 DoProcess 并调用 Updateprogress 来执行您的事件(同步)。

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        var worker = sender as BackgroundWorker;

        while (true) // or something
        {
            DoProcess();
            worker.ReportProgress(0, null);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        OnFinished();
    }

这假设 DoProcess 不接触 UI,它在另一个线程上运行。 ProgressChanged 在主线程上运行。

关于c# - 如何循环以事件结束的流程? (c#.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111971/

相关文章:

c# - 在 Windows 窗体中为文本框、复选框等任何控件加载类似事件?

Python 跳过我的 for 循环

javascript - 使用全局标志将字符串文字作为 Javascript .replace() 模式传递

c# - 对于大量自定义对象集合,Intersection() 和 Except() 太慢

c# - 子字符串格式化以获取第一个下划线之后但第二个下划线之前的所有字符?

c# - 使 COM 互操作事件从界面可见

javascript - 将 for 循环和 while 循环转换为 do...while 循环 JavaScript

c# - 死锁后重新提交事务

c# - 如何在ms-Chart中显示两级X轴

jquery 路径点 : how to bind multiple waypoints on the same object