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

时间:2018-01-29 13:55:35

标签: c# multithreading

假设我有一个方法在程序启动时执行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方法,为什么?

1 个答案:

答案 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线程。