C# 暂停方法/防止引出序号提示显示多次

C# 暂停方法/防止引出序号提示显示多次,c#,multithreading,timer,C#,Multithreading,Timer,这是我的情况,我试图创建一个系统,当网络断开时,气球提示会告诉我网络断开了。但是,通过将气球提示代码放在监控网络的事件中(每个滴答声都使用计时器,基本上是while循环),气球提示会在每个滴答声中出现,而我只希望它出现一次 我还尝试使用两个单独的计时器,让第一个启动另一个,当网络出现故障时,气球提示显示,然后计时器停止。然后我意识到“Thread.Sleep”停止了整个程序,因为代码在一个线程下运行 是否有任何方法可以将计时器停止X秒或仅暂停一种方法X秒,以便气球提示仅显示一次 对不起,我的解释

这是我的情况,我试图创建一个系统,当网络断开时,气球提示会告诉我网络断开了。但是,通过将气球提示代码放在监控网络的事件中(每个滴答声都使用计时器,基本上是while循环),气球提示会在每个滴答声中出现,而我只希望它出现一次

我还尝试使用两个单独的计时器,让第一个启动另一个,当网络出现故障时,气球提示显示,然后计时器停止。然后我意识到“Thread.Sleep”停止了整个程序,因为代码在一个线程下运行

是否有任何方法可以将计时器停止X秒或仅暂停一种方法X秒,以便气球提示仅显示一次

对不起,我的解释太冗长了

有几件事

当您进行轮询时(比如在while循环中),最好使用不同于您的程序正在执行的线程的线程。否则,它将锁定应用程序的UI

我会在另一个线程上运行轮询网络连接的方法。一旦您这样做了,跟踪变量中最后的网络状态,并在您从连接轮询中获得结果时更新该变量

在轮询循环中,如果先前的连接结果是网络已连接,而最近的连接结果是网络已关闭,则调用将显示气球提示的方法(在另一个线程上)

此方法应显示引出序号,休眠X秒,然后隐藏引出序号


有意义吗?

我的想法是这样处理它(伪代码)


基本上是一个公共布尔值,它告诉循环是否需要打开气球提示,如果需要,它会翻转公共布尔值,这样提示就不会再次启动或显示。

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。只需保留一个bool变量,将其命名为NetworkIsDown。仅当您将引出序号从false更改为true时才显示该引出序号。如何将该变量以前为false与现在为true进行比较?创建一个名为LastPollResult的变量(在类中声明,而不是在轮询方法中声明),并将其默认为false。轮询连接性后,将新轮询结果与LastPollResult进行比较,根据比较结果采取操作(如有必要),然后将LastPollResult设置为新轮询结果。
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
        }
    }
}