我的问题是在c#Forms应用程序中有多个Windows.Forms.Timer的性能。
例如,timerHora的间隔为1秒,显示标签中的当前小时。
我没有任何异步方法,因此,当我运行应用程序时,我的GUI不会每秒刷新小时标签,我猜它在与其他计时器相同的线程中运行,并等待其他功能完成,所以它有时每秒刷新一次,其他时间刷新2,3或4秒。
那么......你能推荐我处理这个问题的最佳做法吗?
答案 0 :(得分:1)
您可以尝试
public partial class Form1 : Form
{
Task _task;
CancellationTokenSource _token;
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_token = new CancellationTokenSource();
_task = Task.Factory.StartNew(() => DoWork(), _token.Token);
}
protected override void OnClosing(CancelEventArgs e)
{
_token.Cancel();
Application.DoEvents();
_task.Wait();
base.OnClosing(e);
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
_task.Dispose();
_token.Dispose();
components.Dispose();
}
base.Dispose(disposing);
}
private void SetTime()
{
var dt = DateTime.Now;
label1.Text = $"{dt.Hour}:{dt.Minute}:{dt.Second}";
}
private void DoWork()
{
while (!_token.IsCancellationRequested)
{
if (InvokeRequired)
Invoke(new MethodInvoker(SetTime));
}
}
}
答案 1 :(得分:0)
问题可能是timmers事件要慢。 帖子在主线程中执行,所以如果你的代码很慢,你将减慢所有表格。
尝试做线程而不是timmers