Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何挂起线程,直到缺少连接为止?_C#_Multithreading - Fatal编程技术网

C# 如何挂起线程,直到缺少连接为止?

C# 如何挂起线程,直到缺少连接为止?,c#,multithreading,C#,Multithreading,假设我有一个方法,在程序启动时执行web抓取以填充组合框。该场景是用户启动软件但没有连接,因此组合框中不会插入数据。我试图在一段时间内执行该方法,直到connectionStatus变量值发生变化,举个小例子: Thread connThread; bool connectionStatus = false; try { connThread = new Thread(x => { while (!connectionStatus) {

假设我有一个方法,在程序启动时执行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 ??
}
我需要显示应用程序,但在main中,当我需要暂停线程
connThread
一秒钟时,问题是我找不到任何
Sleep
方法,为什么?

使用。它是
线程
类的静态方法

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();

另外,在向组合框添加项目时要小心,因为所有UI内容都必须在UI线程上完成。在WPF中,您可以调用
Application.Current.Dispatcher.Invoke()
来调用UI线程。

Sleep是一个静态方法,而不是实例方法。您的项目针对的是什么版本的.Net framework?顺便说一句,这种技术叫做“轮询”。我有4.6.1版本。如果不需要线程或轮询,则需要使用
async/await
。这样您就不必阻塞任何线程。HttpClient的方法都已经是异步的了。
connectionStatus
是如何设置的?“挂起当前线程…”-这不是将睡眠错误的线程吗?我刚刚将其添加到了答案中:D也将给出代码示例。