gpt4 book ai didi

c# - 线程 - ResetEvent 和 WebClient

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:12 25 4
gpt4 key购买 nike

代码:

    public string GetTextWebRequest(string url)
{
WebClient cl = new WebClient();
cl.DownloadStringCompleted += new DownloadStringCompletedEventHandler(cl_DownloadStringCompleted);
cl.DownloadStringAsync(new Uri(url));
are.WaitOne();
return _textdata;
}

void cl_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
_textdata = e.Result;
are.Set();
}

为什么我不使用“DownloadString”方法?因为我使用的是紧凑型框架,而异步是我唯一的选择。

无论如何,我的问题是如果主(调用)线程被阻塞,则不会调用“DownloadStringCompleted”。因此永远不会解锁。

我唯一的想法是 WebClient 在调用线程上调用“DownloadStringCompleted”,这没有意义吗?

我有点迷路了。

最佳答案

My only thoughts is that WebClient is calling 'DownloadStringCompleted' on the calling thread, which doesn't make sense?

但这正是正在发生的事情。它记录得很糟糕,但是这个方法+事件遵循后台 worker 模型。您可以在 DownloadStringCompletedEventArgs 成员中看到这种关系。

Bgw 模式在 WinForms(相关)库的不同地方使用。例如,请参见 PictureBox 控件。

因此,结论:不要阻塞...您必须设计一种事件驱动的方法。

关于c# - 线程 - ResetEvent 和 WebClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330528/

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