C# winform 定时器每秒开线程,线程越来越多如何解决不用的线程
时间: 2023-12-29 08:24:33 浏览: 200
Winform基于多线程实现每隔1分钟执行一段代码
以下是解决C# Winform定时器每秒开线程,线程越来越多的方法:
1.使用System.Threading.Timer类,该类不会在每次触发时创建新线程,而是使用线程池中的线程。可以使用Change方法更改定时器的间隔时间。
```csharp
private System.Threading.Timer timer;
private int interval = 1000; // 定时器间隔时间,单位为毫秒
public void StartTimer()
{
timer = new System.Threading.Timer(new TimerCallback(DoWork), null, 0, interval);
}
public void DoWork(object state)
{
// 在这里编写每次定时器触发时要执行的代码
}
public void StopTimer()
{
timer.Dispose();
}
```
2.使用System.Timers.Timer类,该类也不会在每次触发时创建新线程,而是使用线程池中的线程。可以使用Interval属性更改定时器的间隔时间。
```csharp
private System.Timers.Timer timer;
private int interval = 1000; // 定时器间隔时间,单位为毫秒
public void StartTimer()
{
timer = new System.Timers.Timer(interval);
timer.Elapsed += new ElapsedEventHandler(DoWork);
timer.AutoReset = true;
timer.Enabled = true;
}
public void DoWork(object sender, ElapsedEventArgs e)
{
// 在这里编写每次定时器触发时要执行的代码
}
public void StopTimer()
{
timer.Enabled = false;
timer.Dispose();
}
```
3.使用System.Windows.Forms.Timer类,该类会在每次触发时创建新线程,因此不适合在每秒触发的定时器中使用。可以使用Interval属性更改定时器的间隔时间。
```csharp
private System.Windows.Forms.Timer timer;
private int interval = 1000; // 定时器间隔时间,单位为毫秒
public void StartTimer()
{
timer = new System.Windows.Forms.Timer();
timer.Interval = interval;
timer.Tick += new EventHandler(DoWork);
timer.Start();
}
public void DoWork(object sender, EventArgs e)
{
// 在这里编写每次定时器触发时要执行的代码
}
public void StopTimer()
{
timer.Stop();
timer.Dispose();
}
```
阅读全文