这是我的情况,我试图创建一个系统,当网络关闭时,一个气球提示似乎告诉我它已经关闭了。但是,通过将气球提示代码放置在监视网络的事件中(每个滴答使用计时器,基本上是一个while循环),气球提示就会出现在每个滴答中,而我只希望它出现一次。
我还尝试使用两个不同的计时器,第一个启动另一个,当网络出现故障时,气球提示显示,然后计时器停止。然后,我意识到"Thread.Sleep“停止了整个程序,因为代码在一个线程下运行。
是否有停止计时器X秒或暂停一个方法的X秒量,所以气球提示只显示一次?
很抱歉我的解释太长了。
发布于 2013-11-24 21:51:07
所以一些事情..。
当您轮询时(就像在while循环中一样),使用与程序正在执行的线程不同的线程是很好的做法。否则,它将锁定应用程序的UI。
我会运行在另一个线程上轮询网络连接的方法。完成此操作后,跟踪变量中的最后一个网络状态,并在轮询连接性得到结果时更新该变量。
在轮询循环中,如果之前的连接结果是网络已连接,而最近的连接结果是网络关闭,则调用一个方法(在另一个线程上),该方法将显示气球提示。
此方法应显示气球,休眠X秒,然后隐藏气球。
讲得通?
发布于 2013-11-24 21:57:07
我对它的想法是这样处理它(伪代码)
class Program
{
public static bool hasBalloonOpened { get; set; }
static void Main(string[] args)
{
while (network == down)
{
if (!hasBalloonOpened)
{
hasBalloonOpened = !hasBalloonOpened;
BalloonTip.Show();
}
//rest of loop or method calls
}
}
}基本上是一个公共布尔值,它告诉循环是否需要打开气球提示,如果需要,它会翻转公共布尔值,这样提示就不会再次触发或显示。
https://stackoverflow.com/questions/20181433
复制相似问题