>假设我有一个在程序启动时执行网页抓取以填充组合框的方法。这种情况是用户启动软件但没有连接,因此不会在组合框中插入任何数据。我正在尝试在一段时间内执行该方法,直到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 线程。