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