2011-06-15 84 views
1

我目前在c#中使用线程和backgroundworker。我遇到的问题就是这个。假设我有一个用于用户交互的主线程和一个工作线程来处理txt文件(各种编辑操作)。然后在backgroundthread运行其内容一次后,我有一个定时器启动,执行另一组操作。我希望计时器运行x这些新操作可以在同一个后台线程中运行,而无需运行在定时器启动之前运行的前一个txt相关操作。如何才能做到这一点?c中的后台线程#

+0

为什么不启动另一个线程? – 2011-06-15 17:37:47

+0

后台线程是否在任何时候终止或连续运行?如果它继续运行,您可以在工作线程中使用本地布尔变量来记住定时器操作是否已经运行。 – 2011-06-15 17:38:31

+0

@Justin C计时器代码在timer_Elapsed方法内运行。你如何从计时器线程调用backgroundworker1_DoWork? – hWorld 2011-06-15 17:40:38

回答

1

您应该只使用一个System.Timers.Timer,它将在线程池线程上运行它的回调。

不管你运行哪个特定的线程(只要它不是UI线程)。
如果出于某种原因,它确实很重要(例如,如果您使用的是单线程COM对象),则需要使用线程安全的委托队列等待事情的完成。

+0

线程池线程上的回调是什么意思? – hWorld 2011-06-15 17:41:38

+0

'Tick'事件将在ThreadPool的线程上运行,就像'BackgroundWorker'一样。 (虽然不一定是相同的线程) – SLaks 2011-06-15 17:43:32

0

添加一个while循环到你的后台工作的结束:

而(!停止){Thread.sleep代码(yourIntervalinMilliseconds); ...}

我会创建一个停止布尔的地方,线程看你想要它踢出。