在c#中从不同的线程启动计时器
本文关键字:线程 启动 计时器 | 更新日期: 2023-09-27 17:50:43
嗨,我遇到了一些与定时器有关的问题。希望有人能帮忙…
- 我有一个windows窗体包含一个按钮
- 当我点击该按钮时,我启动一个参数化线程
Thread thread1 = new Thread(new ParameterizedThreadStart( execute2));
thread1.Start(externalFileParams);
- 线程内的代码执行得非常好 在这个线程的最后一行,我启动一个定时器
.
public void execute2(Object ob)
{
if (ob is ExternalFileParams)
{
if (boolean_variable== true)
executeMyMethod();//this also executes very well if condition is true
else
{
timer1.enabled = true;
timer1.start();
}
}
}
}
5,但是定时器的tick事件没有触发
我正在开发VS2008 3.5框架。我已经从工具箱中拖动定时器,并将其Interval
设置为300,也试图设置Enabled
为真/假方法是timer1_Tick(Object sender , EventArgs e)
,但它没有发射
您可以尝试这样启动计时器:
添加表单构造函数this:
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 1 second.
aTimer.Interval = 1000;
将此方法添加到Form1:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//do something with the timer
}
On button click event add this:
aTimer.Enabled = true;
Matías fidemrazer说的是真的。但是,有一个工作…
当你的窗体上有一个可调用的控件(例如:(状态栏),只需调用它!
c#代码示例:private void Form1_Load(object sender, EventArgs e)
{
Thread sampleThread = new Thread(delegate()
{
// Invoke your control like this
this.statusStrip1.Invoke(new MethodInvoker(delegate()
{
timer1.Start();
}));
});
sampleThread.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("I just ticked!");
}
System.Windows.Forms。定时器在单线程应用程序中工作。
查看此链接:
- http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
评论说:
定时器用于引发事件用户定义的时间间隔。这个窗户定时器是为单线程环境,其中UI线程用于执行处理。它要求用户代码有一个可用的UI消息泵并且总是从相同的角度出发线程,或将调用编组到另一个线程。
阅读更多的"备注"部分,你会发现微软建议你使用这个定时器与UI线程同步。
我会使用BackgroundWorker(而不是raw线程)。主线程将订阅工作线程的RunWorkerCompleted事件:当线程完成时,该事件将在主线程中触发。使用此事件处理程序重新启动计时器。