假设我有一个方法在程序启动时执行Web抓取以填充组合框。方案是用户启动软件但没有连接,因此组合框中不会插入任何数据。我试着在一段时间内执行该方法,直到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
方法,为什么?
答案 0 :(得分:1)
使用Thread.Sleep()。它是Thread
类的静态方法。
Thread.Sleep(1000); // sleeps for 1 second
调用它会挂起调用线程,所以如果你想在你的线程中睡觉,把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线程。