1

在我的应用程序中,我有两个带有两个标签的文本框:“已连接”和“未连接”。如我的代码所示,如​​果建立了连接,“已连接”文本框将填充绿色,表示网络连接。如果没有,它将是红色的。

连接检测的功能工作得很好,但是,我必须重新打开应用程序才能检测到更改。我正在寻找一种每隔 5-10 秒左右自动刷新应用程序以检测连接性变化的方法。我不想清除任何其他字段或框的内容,只是清除颜色文本框。可以说是软轮询循环。我将如何使用 Timer 方法执行此操作。我应该创建一个新线程来运行计时器并刷新框吗?

谢谢。

  if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() == false)
        {
            noConnect.Select();  //if not connected, turn box red
            noConnect.BackColor = Color.Red;

        }

        else
        {
            netConnect.Select();  // if connected, turn box green
            netConnect.BackColor = Color.Lime;

        }

        //need to refresh box/application without losing other box/field contents 
        //in order to constantly check connectivity around 5-10 seconds or so
        //constantly check connectivity 
4

3 回答 3

6

像这样的东西会起作用

    public Form1()
    {
        InitializeComponent();
        var timer = new Timer();
        timer.Tick += new EventHandler(timer_Tick);
        timer.Interval = 10000; //10 seconds
        timer.Start();
    }

    void timer_Tick(object sender, EventArgs e)
    {
        if (your_function_call())
        {
            netConnect.BackColor = Color.Green;
        }
        else
            netConnect.BackColor = Color.Red;
    }

timer_Tick 将在每个间隔重复调用,您可以轮询您的状态并更新控件。因为在 UI 线程中调用了计时器回调,所以您可以更新任何 UI 元素。

定时器类

Timer 用于以用户定义的时间间隔引发事件。此 Windows 计时器专为使用 UI 线程执行处理的单线程环境而设计。它要求用户代码具有可用的 UI 消息泵,并且始终从同一个线程操作,或者将调用编组到另一个线程。使用此计时器时,使用 Tick 事件执行轮询操作或在指定时间段内显示启动屏幕。只要 Enabled 属性设置为 true 并且 Interval 属性大于零,就会根据 Interval 属性设置每隔一段时间引发 Tick 事件。

此解决方案使用System.Windows.Forms.Timer调用 UI 线程上的刻度。如果您使用System.Timers.Timer回调将不会在 UI 线程上。

于 2012-08-14T12:21:56.940 回答
1

只需创建计时器。它可以很好地在他自己的线程上运行,而无需您做任何其他事情。

于 2012-08-14T12:18:10.653 回答
1

您可以在应用程序的某处创建计时器

var timer = new System.Timers.Timer();
timer.Interval = 5000; // every 5 seconds
timer.Elapsed = (s, e) => {
    // Your code
};
timer.Start();

注意:请注意,您在 Elapsed 事件处理程序中的代码可以/将在另一个线程上运行!

于 2012-08-14T12:19:25.877 回答