问题是关于在每个创建的线程中使用计时器。
我正在编写一个应用程序,每30秒从PC收集一次CPU数据。如果我只从1台PC收集数据并使用1个计时器,没有任何线程,它就可以工作。现在,我想同时从2台PC上收集数据。为此,我决定使用线程,每个线程将适用于每台PC并具有自己的计时器。因此,2个线程,2个计时器,2台PC。我使用System.Windows.Threading.DispatcherTimer来为每个线程创建一个计时器。但是,问题是创建的计时器没有开始工作(即不调用timerTick)。 因此,如果我创建一个没有线程的计时器,那么它可以正常工作,而线程创建的计时器不起作用。 :(
也许所考虑的解决方案不正确,需要进行一些更改。请帮我理解这个问题。
以下是代码的简单版本:
void CreateThread()
{
Thread First = new Thread(new ThreadStart(FirstThreadWork));
First.Start();
}
private void FirstThreadWork()
{
System.Windows.Threading.DispatcherTimer timer;
timer = new System.Windows.Threading.DispatcherTimer();
timer.Tick += new EventHandler(timerTick);
timer.Interval = new TimeSpan(0, 0, 30);
timer.Start();
}
private void timerTick(object sender, EventArgs e)
{
MessageBox.Show("Show some data");
}
答案 0 :(得分:2)
DispatcherTimer
仅在UI线程上创建但在后台线程上创建时才起作用。如果您不打算操纵timerTick
方法中的任何UI元素,那么您可能需要考虑System.Timers.Timer
示例代码
void StartTimer()
{
var timer = new System.Timers.Timer();
timer.Elapsed += timerTick;
timer.Interval = 30000;
timer.Enabled = true;
timer.Start();
}
private void timerTick(object sender, EventArgs e)
{
MessageBox.Show("Show some data");
}