我的应用程序设置为在单击通知气球提示时进入休眠状态,并且此过程全部循环。这有效,但是当我唤醒我的电脑时,它很快就会进入睡眠状态(这有一点时间延迟,但是因为这需要我的计算机通常需要的时间才能进入睡眠状态,所以我不会考虑任何因素)。我已经从我的整个程序中删除了这个片段,然后程序运行得非常好,让我觉得这段代码中的某些内容会使计算机进入睡眠状态。此外,如果重置控制循环的其中一个标志,我会重置这些标志,但问题仍然存在。如果(由于一些奇怪的原因)布尔运算符正在影响它,我已经在所有组合中更改了它们,并且仍然不起作用!我已经尝试添加一个命令来防止计算机进入睡眠状态,但这也无效。有什么建议?非常感激。
for (; ; )
{
bool for3 = false;
for (; ; )
{
notifyIcon.ShowBalloonTip(10000);
System.Threading.Thread.Sleep(10000);
Application.DoEvents();
if (loopVariable)
for3 = true;
if (for3) break;
System.Threading.Thread.Sleep(60000);
}
loopVariable = false;
for3 = false;
DateTime timeOnSleep = DateTime.Now;
Application.SetSuspendState(PowerState.Suspend, false, false);//this is the annoying code
DateTime timeOnWake = DateTime.Now;
TimeSpan time = timeOnWake - timeOnSleep;
var minutes = time.TotalMinutes;
Math.Round(time.TotalMinutes, MidpointRounding.AwayFromZero);
double dMins = minutes;
try
{
int iNumber = System.Convert.ToInt32(dMins);
}
catch (System.OverflowException)
{
if (dMins >= 40)
break;
}
}
private static bool loopVariable = false;
void notifyIcon_BalloonTipClicked(object sender, EventArgs e)
{
loopVariable = true;
}
答案 0 :(得分:0)
如果你发现自己在使用doevents,那么你可能会做错事。如果你需要运行这样的循环,请使用do {}
而不是for (;;)
。无论如何,你不需要这些东西。如果这不应该无限运行,您可以在调用Application.SetSuspendState
之前禁用计时器。
void Main()
{
Timer timer = new Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = 30000; //How often you want to show the tooltip?
timer.Enabled = true;
}
void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
{
Application.SetSuspendState(PowerState.Suspend, false, false);
}
void timer_Tick(object sender, EventArgs e)
{
notifyIcon1.ShowBalloonTip(10000);
}