C#在BackgroundWorker RunWorkerCompleted完成后立即执行某些操作

时间:2013-03-12 21:30:06

标签: c# multithreading backgroundworker

我有一个C#项目(.NET 3.5),它使用BackgroundWorker来做一些事情。 这个东西为它执行的所有操作写了一个日志文件。当BackgroundWorker 完成后,我需要检索日志文件中的一些信息。问题是 触发RunWorkerCompleted事件时,日志文件仍为空。因此,如果我执行以下操作:

private void BackProgress_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
      LoadLog();

}

LoadLog方法将找到一个空日志。

我一直在调试应用程序,我发现在RunWorkerCompleted中的最后一个大括号被击中的那一刻,日志文件不再是空的。我不知道如何在适当的时候加载日志文件,因为我在调用RunWorkerAsync()后立即执行的任何操作都会立即执行,BackgroundWorker的工作仍然无法完成(再次,一个空的日志)。

基本上我需要能够在LoadLog方法结束后立即致电RunWorkerCompleted

你有什么想法可以帮我解决这个问题吗?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Control / Form BeginInvoke方法异步调用LoadLog。

此方法使用PostMessage将已注册的消息放在Windows消息队列中并立即返回 - 这就是它如何进行异步调用。

像这样:

BeginInvoke(new MethodInvoker(LoadLog));