如何挂起线程直到连接不存在?



>假设我有一个在程序启动时执行网页抓取以填充组合框的方法。这种情况是用户启动软件但没有连接,因此不会在组合框中插入任何数据。我正在尝试在一段时间内执行该方法,直到connectionStatus变量值发生变化,举个小例子:

Thread connThread;
bool connectionStatus = false;
try
{
connThread = new Thread(x =>
{
while (!connectionStatus)
{
if(connectionStatus) break;
GetDataFromWeb(); 
}
});
connThread.Start();
}
catch (Exception e)
{ 
//There is no connection
connectionStatus  = false;         
connThread. //There is no SleepMethod ??
}

我需要显示应用程序,但总的来说我需要暂停线程connThread一秒钟,问题是我找不到任何Sleep方法,为什么?

使用 Thread.Sleep()。它是Thread类的静态方法。

Thread.Sleep(1000); // sleeps for 1 second

调用 this 会暂停调用线程,因此,如果您想在线程内睡觉,请将 try/catch 放在线程内并在那里调用Thread.Sleep

例如,我将如何做到这一点:

var connThread = new Thread(x =>
{
while(true) {
try {
GetDataFromWeb();
break;
} catch {
// sleep for 1 second
// and then try again
Thread.Sleep(1000);
}
}
});
connThread.Start();

此外,将项添加到 ComboBox 时要小心,因为所有 UI 内容都必须在 UI 线程上完成。在 WPF 中,可以调用Application.Current.Dispatcher.Invoke()来调用 UI 线程。

最新更新