gpt4 book ai didi

c# - 无法正常运行函数或以后台 worker 的身份运行

转载 作者:行者123 更新时间:2023-12-03 13:20:03 26 4
gpt4 key购买 nike

我试图创建一个启动GUI的应用程序,然后已经显示它,我希望它运行另一个使用WebClient()的函数,并且一旦执行查询,就应该将其输出到页面上的标签。我尝试使用show和其他一些事件,但是所有这些事件在完成查询之前都会停止GUI的加载。

我尝试使用线程,由于标签位于不同的线程上,因此不允许更新标签,我尝试了异步,但由于某种原因无法获得结果,现在我正在尝试后台worker,我没有收到任何错误,但是标签也没有更新。

现在我有一些像这样的东西

public project()
{
InitializeComponent();
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += querysite;
}

private void querysite(object sender, DoWorkEventArgs e)
{
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add("user-agent", "libcurl-agent/1.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
byte[] myDataBuffer = myWebClient.DownloadData("http://example.com/SystemStatus");
string download = Encoding.ASCII.GetString(myDataBuffer);
if (download.IndexOf("is online") !=-1)
{
systemStatusLabel.Text = "System is up";
}
else
{
systemStatusLabel.Text = "System is down!";
}

throw new NotImplementedException();
}

我做错什么了吗?有没有更好的方法可以做到这一点?我已经坚持了几个小时,找不到任何可以满足我需要的东西。

最佳答案

我对您的代码做了一些修改,以使用BackgroundWorker
我还允许自己在查询站点和更新GUI的逻辑操作之间做一些分离。
这应该为您工作:

    public project()
{
InitializeComponent();



BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true };
bool isOnline = false;
bw.DoWork += (sender, e) =>
{

//what happens here must not touch the form
//as it's in a different thread
isOnline = querysite();


};

bw.ProgressChanged += (sender, e) =>
{
//update progress bars here

};

bw.RunWorkerCompleted += (sender, e) =>
{
//now you're back in the UI thread you can update the form

if (isOnline)
{
systemStatusLabel.Text = "System is up";
}
else
{
systemStatusLabel.Text = "System is down!";
}


};

}

private bool querysite()
{
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add("user-agent", "libcurl-agent/1.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
byte[] myDataBuffer = myWebClient.DownloadData("http://example.com/SystemStatus");
string download = Encoding.ASCII.GetString(myDataBuffer);
bool isOnline = download.IndexOf("is online") != -1;
return isOnline;

}

当您希望完成查询时,您需要调用 bw.RunWorkerAsync();

关于c# - 无法正常运行函数或以后台 worker 的身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com