首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本框的计时器/刷新功能

文本框的计时器/刷新功能
EN

Stack Overflow用户
提问于 2012-08-14 20:14:47
回答 3查看 15.6K关注 0票数 1

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

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

谢谢。

代码语言:javascript
复制
  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 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-14 20:21:57

像这样的东西就行了

代码语言:javascript
复制
    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-thread中调用的,所以您可以更新任何UI元素。

来自Timer Class

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

这个解决方案使用System.Windows.Forms.Timer来调用UI-thread上的tick。如果你使用System.Timers.Timer,回调将不会在UI-thread上。

票数 6
EN

Stack Overflow用户

发布于 2012-08-14 20:18:11

只需创建timer。它可以在他自己的线程上运行,而不需要你做任何其他的事情。

票数 1
EN

Stack Overflow用户

发布于 2012-08-14 20:19:26

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

代码语言:javascript
复制
var timer = new System.Timers.Timer();
timer.Interval = 5000; // every 5 seconds
timer.Elapsed = (s, e) => {
    // Your code
};
timer.Start();

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11952075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档