C# 连续检查不同螺纹的状况

C# 连续检查不同螺纹的状况,c#,wpf,multithreading,C#,Wpf,Multithreading,我有两次约会。一个是当前的,另一个是比赛开始的日期时间。现在我想在后台线程中连续检查这分钟差(我不知道线程)。如果您只想使用后台任务监视日期/时间,我建议您不要创建新的线程 对于WPF,您可以尝试使用dispatchermer对象及其Tick事件,而不是线程 System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTim

我有两次约会。一个是当前的,另一个是比赛开始的日期时间。现在我想在后台线程中连续检查这分钟差(我不知道线程)。如果您只想使用后台任务监视日期/时间,我建议您不要创建新的
线程

对于WPF,您可以尝试使用
dispatchermer
对象及其
Tick
事件,而不是线程

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
对于WinForms,您可以将
计时器
对象与其
勾选事件一起使用

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
这样,您就可以使用
Thread
ThreadPool


编辑:要使用
任务。延迟
,因为有些人更喜欢这种“更干净”的方式,请参阅Aron先生的评论

如果您只想使用后台任务监视日期/时间,我建议您不要创建新的
线程

对于WPF,您可以尝试使用
dispatchermer
对象及其
Tick
事件,而不是线程

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
对于WinForms,您可以将
计时器
对象与其
勾选事件一起使用

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
这样,您就可以使用
Thread
ThreadPool


编辑:要使用Task.Delay
,因为有些人更喜欢这种更“干净”的方式,请参阅Aron先生的评论

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);

您可以使用Task.Runlike

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);

从显示的代码来看,确实不清楚您想要什么,但是WaitHandle或busy循环应该可以做到这一点。您可以使用timer来实现这一点,创建一个timer对象,根据您需要的时间差来更新UI,比如thistimer=new timer(1000);//这里我们设置1秒,即1000毫秒//这里设置您案例中需要的时间timer.appeased+=new ElapsedEventHandler(timer_expeased);timer.Enabled=true;static void timer_expeased(object sender,ElapsedEventArgs e){//这里更新您的ui}让我知道这是否对你有效,我会补充这一点作为回答你也可以使用
线程池
。下面是一个简单的例子:从显示的代码中,你真的不清楚你想要什么,但WaitHandle或busy循环应该可以做到这一点。你可以使用timer来实现这一点,创建一个timer对象,根据你需要的时间差来更新你的UI som例如thistimer=new Timer(1000);//这里我们设置1秒,即1000毫秒//这里设置您案例中需要的时间Timer.appeased+=new ElapsedEventHandler(Timer_appeased);Timer.Enabled=true;static void Timer_appeased(object sender,ElapsedEventArgs e){//这里更新您的ui}让我知道这是否对你有效,我会补充这一点作为回答,你也可以使用
线程池我讨厌这样做。简单地设置一个计时器在你想要的时间运行会更有意义。你的意思是,你不喜欢
勾选
事件?例如
等待任务。延迟(raceStart-DateTimeNow)
好的,我相信使用
任务也是个好主意。延迟
。它“更干净”还有一些。我的回答是关于你的评论。虽然这个“技术上可行”,但我不愿意这样做。简单地设置一个计时器在你想要的时间运行会更有意义。你的意思是,你不喜欢
勾选
事件?例如
等待任务。延迟(raceStart-DateTimeNow)
好的,我相信使用
任务也是一个好主意。延迟
。它更“干净”一些。我的答案请参考您的评论。