我有一个进程在完成时调用一个事件。
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/