2011-03-23 30 views
0

如果我没有清楚地解释这些,我很抱歉,但是我正在编写一个应用程序,它导致我在线程方面出现了一些问题。向父UI线程报告进度

我有一个用于启动System.Timers.Timer的UI。每次计时器过去时,都会触发一个打开进度屏幕的工作流程。为防止在最后一个工作流完成之前启动另一个工作流,它将锁定主窗体上的对象。 此进度屏幕启动并报告使用FileCopyEX进行某些文件复制的进度。

我遇到的问题是进度屏幕直到工作流程完成后才显示。

希望这将使其更清晰:

主要形式 | Timer Elapses | WorkFlow开始 | 进度屏幕打开(发生的错误可追溯到前一个) | 发生文件复制(进度报告回到进度屏幕) 如果没有错误,则在下一次打勾前返回到主屏幕。

直到现在我只实现了非常简单的线程,所以我不确定如何最好地实现这一点。我已经尝试在BackGroundWorker上启动工作流程以将其从UI线程分离,但它的行为相同。

感谢

+0

你的问题开始于System.Timers.Timer,Elapsed在另一个线程上运行。之后它变得很不清楚。关注BackgroundWorker。 – 2011-03-23 17:23:56

回答

1

我建议你阅读一下BackgroundWorker。这有助于报告进展情况。

请记住,系统计时器在非UI线程上调用其事件处理程序。每当你使用UI做什么时,你都必须在UI线程上。

1

没有代码,我只能猜测的原因,但可能的原因是进度窗口需要的UI是抽的消息出现 - 即UI线程需要运行。

如果UI线程忙于运行您的工作流程,那么它将不会处理显示您的窗口,直到此后。您需要分离流程,以便进度窗口位于UI线程上,而工作流程位于后台线程上。

希望有道理!