持续检查不同螺纹的状况
本文关键字:检查 | 更新日期: 2023-09-27 18:27:29
我有两个日期时间。一个是最新的,另一个是比赛开始的日期时间。现在我想在后台线程中不断检查这个Minutes差异(我不知道线程)。当它满足if(remainingMinutes<=4)时,我想更新UI。如何在后台使用线程来实现这一点?
public RelayCommand OpenSetBets
{
get { return _setBets ?? (_setBets = new RelayCommand(ExecuteSetBets, CanExecuteSetBets)); }
}
private void ExecuteSetBets()
{
_navigation.NavigationToSetBetsDialogue();
}
private bool CanExecuteSetBets()
{
// Thread t = new Thread(newthread);
double? remainingMinutes = null;
if (UK_RaceDetail.Count() != 0)
{
//t.Start();
DateTime CurrentUTCtime = DateTime.UtcNow;
DateTime NextRaceTime = UK_RaceDetail[0].One.Time;
remainingMinutes = NextRaceTime.Subtract(CurrentUTCtime).TotalMinutes;
}
if (remainingMinutes <= 4)
{
return true;
}
else
{
return false;
}
}
更新的代码。若比赛将在接下来的4分钟内开始,我想启用按钮。
如果您只想使用后台任务来监视日期/时间,我建议您不要创建新的Thread
。
对于WPF,您可以尝试使用DispatcherTimer
对象及其Tick
事件,而不是线程
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
对于WinForms,可以将Timer
对象与其Tick
事件一起使用
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
这样,使用Thread
或ThreadPool
可以避免更复杂的解决方案
编辑:要使用Task.Delay
,因为有些人更喜欢这种"更干净"的方式,请参阅Aron 先生的评论
您可以使用Task.Run like,
System.Threading.Tasks.Task.Run(async () =>
{
//starts running in threadpool parallelly
while (!CanExecuteSetBets())
{
await Task.Delay(500); //wait 500 milliseconds after every check
}
DoYourWork(); //trigger your work here
}).ConfigureAwait(false);