在我的应用程序中,我有两个文本框,附有两个标签:“已连接”和“未连接”。如我的代码所示,如果建立了连接,“已连接”文本框将填充绿色,表示网络连接。如果不是,它会变红。
连接检测的功能正常工作,但是,我必须重新打开应用程序以检测更改。我正在寻找一种方法来自动刷新应用程序每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
答案 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用于以用户定义的间隔引发事件。这个 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事件处理程序中的代码可以/将在另一个线程上运行!