gpt4 book ai didi

c# - 方法启动时停止 DispatcherTimer

转载 作者:行者123 更新时间:2023-11-30 20:58:35 26 4
gpt4 key购买 nike

我仍在学习 C#,我需要一些帮助。我有一个调度计时器,它每秒检查一次日期时间是否已初始化。它有效,但问题是它会继续做同样的事情,直到日期时间结束。例如,我希望 datetime 启动记事本。问题是 dispatchtimer 每 1 秒查找一次日期时间,这意味着记事本每秒钟启动一次。如何在 DateTime 方法启动时停止 DispatchTimer?

代码如下:

    private void Start_Click(object sender, RoutedEventArgs e) //Button start.
{
test();
}
private void startjob() //DateTime checking for DateValue and start's if correct value.
{
DateTime? start = DateTimePicker1.Value;
DateTime? end = DateTimePicker2.Value;
DateTime now = DateTime.Now;

if (start == null || end == null)
{
Xceed.Wpf.Toolkit.MessageBox.Show("one of the pickers is empty");
}
else if (now >= start.Value && now <= end.Value)
{
Process notePad = new Process();

notePad.StartInfo.FileName = "notepad.exe";

notePad.Start();

}
}
private void test() // DispatchTimer
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 1);
dispatcherTimer.Start();
}


private void dispatcherTimer_Tick(object sender, EventArgs e)
{
try
{
startjob();
}
catch (Exception)
{

}

最佳答案

您可以让委托(delegate)的事件处理程序停止计时器。

首先快速调整 startJob 以通知它是否启动了记事本(我假设如果没有启动,你想继续尝试):

private bool startjob() //DateTime checking for DateValue and start's if correct value.
{
DateTime? start = DateTimePicker1.Value;
DateTime? end = DateTimePicker2.Value;
DateTime now = DateTime.Now;

if (start == null || end == null)
{
Xceed.Wpf.Toolkit.MessageBox.Show("one of the pickers is empty");
}
else if (now >= start.Value && now <= end.Value)
{
Process notePad = new Process();

notePad.StartInfo.FileName = "notepad.exe";

notePad.Start();
return true;
}
return false;
}

您没有发布您的 dispatcherTimer_Tick 方法,但您应该能够将其合并为事件处理程序中的 sender 是计时器本身:

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (startJob())
{
//if notepad was started, stop the timer
DispatcherTimer timer = (DispatcherTimer)sender;
timer.Stop();
}
}

编辑:如果您的意图是停止计时器而不管输入是否有效以启动记事本,那么您可以放弃 bool 结果/检查并调用 Stop () 在 Tick 事件中的计时器上。

关于c# - 方法启动时停止 DispatcherTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com