这是我的情况,我正在尝试创建一个系统,当网络关闭时,气球提示似乎告诉我它已关闭。但是,通过将气球提示码放在监控网络的事件内(每次使用计时器进行滴答,所以基本上是一个循环),气球提示出现在每个滴答声中,而我只希望它出现一次。
我还尝试过使用两个独立的计时器,让第一个计时器启动另一个计时器,当网络出现故障时,会显示气球提示,然后计时器停止。然后我意识到“Thread.Sleep”会停止整个程序,因为代码在一个线程下运行。
是否有停止计时器X秒的数量或暂停一个方法X秒,所以气球提示只显示一次?
很抱歉我的解释如此啰嗦。
答案 0 :(得分:1)
所以有一些事情......
当您进行轮询时(比如在while循环中),最好使用与程序执行的线程不同的线程。否则,它将锁定应用程序的UI。
我将运行在另一个线程上轮询网络连接的方法。完成后,跟踪变量中最后一个网络状态的内容,并在通过轮询连接获得结果时更新该变量。
在您的轮询循环中,如果之前的连接结果是网络已连接且您最近的连接结果是网络已关闭,则调用将显示气球提示的方法(在另一个线程上)。 / p>
此方法应显示气球,睡眠X秒,然后隐藏气球。
有意义吗?
答案 1 :(得分:1)
我对它的想法就是这样(伪代码)
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
}
}
}
基本上是一个公共布尔值,它告诉循环是否需要打开气球提示,如果是,它会翻转公共布尔值,这样提示就不会触发或重新显示。