2014-01-24 39 views
0

我正在制作一个程序,在后台运行,并在一天中的特定时间,它会弹出一个窗口,指示锻炼。 (适用于我工作的上班族)垃圾邮件消息框c#

问题是:当需要练习说明的时候,我想要一个消息框弹出并询问您是否准备好了。 我在“if(blabla == true)”里面有这个消息框代码,所以它会持续发送垃圾邮件。

我该如何避免这种情况?我看不到任何其他地方放置消息框。

它基本上是:

if (DateTime.Now.ToString("HH:mm") == "09:00") 
{ 
    progress = true; 
} 

if(progress == true) 
{ 
    DialogResult dialogResult = MessageBox.Show("Start?", "Bla Bla",  MessageBoxButtons.YesNo); 
if(dialogResult == DialogResult.Yes) 
{ 
    exercise.Action(); 
} 
} 

有没有办法有对话框在同一个地方,但有它出现一次?会让我的项目变得更容易。

谢谢!

+0

显示更多代码。你在哪里调用这个方法 –

+1

我想你需要'(DateTime.Now.ToString(“HH:mm:ss”)==“09:00:00”)'作为条件从9到10 –

+0

代码在void _Ongoing(object sender,EventArgs e) private void Form1_Load_1(object sender,EventArgs e) { _Timer.Interval = 1000; _Timer.Tick + = new EventHandler(_Ongoing); _Timer.Start(); } 正如你所看到的,它每秒更新一次。 –

回答

1

这不是C#或WinForms问题,它是一个算法问题。尝试首先设计算法,然后将其转换为您选择的编程语言。

怎么样以下(伪代码,假设你要打断你的人每个整点):

nextHour = 9 

loop forever: 
    if now = nextHour:00 
     show message box 
     if answer = yes 
      exercise 
     nextHour++ 
    else 
     sleep for a minute 

这将显示恰好一次消息框后增加从9 nextHour至10。


还有就是,其实,另一种选择:你试图实现一个调度,执行在某个时间某个动作的程序。 Windows已经包含一个调度程序,Windows Task Scheduler

因此,不是重新发明轮子,你可以让你的程序是这样的:

show message box 
if answer = yes 
    exercise 

它编译成一个exe和设置Windows任务调度程序来运行它每隔一小时(或其他频率你的用户需要)。

+0

谢谢。你是对的。 –

+0

永远循环?那么'Timer'呢?他们已经被弃用了吗? –