场景,定时器6S一次调用以下方法:代码大概如下:
我另外的业务需要暂停这个定时器,当重新启动定时器时,因为需要即时,所以没用定时器启动方法,而直接调用这个方法,方法内部运行完再启动这个定时器,有时候很慢才进入UI线程里面,保存数据完成后开始计算UI线程进入事件,大概30秒以上。这是线程在排队吗?我应该怎么优化我的代码?或者说我能否指定一个线程专门负责我的定时器,而不需要每次都开启一个线程?
public void GetShipLocation(int min)
{
if (StopTimer)
{
return;
}
ThreadPool.QueueUserWorkItem((o) =>
{
Task.Run(async () =>
{
getShipPositionTimer.Stop();
try
{
Console.WriteLine("Testing method: GetShipLocation " + DateTime.Now);
//读取数据
//保存数据
await App.MyDatabase.SaveVesselRecordListAsync(App.vesselRecordList);
await App.MyDatabase.SaveListWarningMessAsync(newWarnList);
Application.Current.Dispatcher.Invoke(() =>
{
//一些UI线程对象操作
});
}
catch (Exception ex)
{
}
getShipPositionTimer.Start();
});
});
}
相关问题
- VNC control for WPF application
- WPF Binding from System.Windows.SystemParameters.P
- XAML: Applying styles to nested controls
- How can I add a horizontal line (“goal line”) for
- How to properly change a resource dictionary
QueueUserWorkItem 里面的代码必要再用Task了。可能连QueueUserWorkItem都不用因为看这代码读数据和保存数据的方法都是异步的。方法在保存完数据后才会执行更新UI的代码啊,你可以在读数据前和更新UI前记录下时间看看间隔时间
有一些问题
没看懂描述,
定时器6S一次调用GetShipLocation,
然后GetShipLocation里面又有对于定时器的Stop和Start?