文本框的定时器/刷新功能

时间:2012-08-14 12:14:47

标签: c# winforms multithreading timer refresh

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

连接检测的功能正常工作,但是,我必须重新打开应用程序以检测更改。我正在寻找一种方法来自动刷新应用程序每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 

3 个答案:

答案 0 :(得分: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 Class

  

Timer用于以用户定义的间隔引发事件。这个   Windows计时器专为UI的单线程环境而设计   线程用于执行处理。它需要用户代码   有一个UI消息泵可用,并始终使用相同的操作   线程,或将调用封送到另一个线程。当你使用它   timer,使用Tick事件执行轮询操作或显示   一段特定时间的闪屏。每当启用   property设置为true,Interval属性大于   为零,Tick事件基于Interval按间隔引发   物业设置。

此解决方案使用System.Windows.Forms.Timer调用UI线程上的tick。如果使用System.Timers.Timer,则回调将不在UI线程上。

答案 1 :(得分:1)

只需创建timer即可。它完全依靠自己的线程运行而不用其他任何东西。

答案 2 :(得分:1)

您可以在应用程序的某个位置创建计时器

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

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