在我的应用程序中,有两个文本框和两个标签:"Connected“和"Not Connected”。如我的代码所示,如果建立了连接,"Connected“文本框将填充绿色,表示网络连接。如果不是,它将是红色的。
连接检测的功能工作正常,但是,我必须重新打开应用程序才能检测到更改。我正在寻找一种方法,每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 发布于 2012-08-14 20:21:57
像这样的东西就行了
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上。
发布于 2012-08-14 20:18:11
只需创建timer。它可以在他自己的线程上运行,而不需要你做任何其他的事情。
发布于 2012-08-14 20:19:26
您可以在应用程序中的某个位置创建计时器
var timer = new System.Timers.Timer();
timer.Interval = 5000; // every 5 seconds
timer.Elapsed = (s, e) => {
// Your code
};
timer.Start();注意:请注意,Elapsed事件处理程序中的代码可以/将在另一个线程上运行!
https://stackoverflow.com/questions/11952075
复制相似问题