Skip to main content
 首页 » 编程设计

c#之System.Net.WebClient 问题

2024年02月03日26飞鱼

我正在编写一个必须访问 MySQL 数据库的程序。为此,我编写了一个 PHP WebService 来获取表中的所有值。我遇到的问题是我正在用 C# 编写一个函数来获取这些值。我希望该函数等到调用 DownloadStringCompleted 事件的事件处理程序,然后返回值。我是这样做的:

WebClient client = new WebClient(); 
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadCompletedHandler); 
client.DownloadStringAsync(new Uri(Application.Current.Host.Source.AbsoluteUri + "\\PHP\\GetAdmins.php")); 
while (DownloadCompleted == false) { } 
return DownloadResult; 

但这会使程序挂起。

我需要一些东西来使程序的那部分暂停,直到 DownloadConpleted = true。

我正在运行 Visual Studio Ultimate 2010,正在制作 Silverlight 应用程序,如有任何帮助,我们将不胜感激。

请您参考如下方法:

你可以使用 ManualResetEvent - 从下载完成处理程序发出完成事件信号并让主线程等待它:

ManualResetEvent completionEvent = new ManualResetEvent(false); 
WebClient webClient = new WebClient(); 
webClient.DownloadStringCompleted +=delegate(object sender, DownloadStringCompletedEventArgs e) 
{ 
    completionEvent.Set(); 
}; 
 
webClient.DownloadStringAsync(new Uri(Application.Current.Host.Source.AbsoluteUri + "\\PHP\\GetAdmins.php")); 
completionEvent.WaitOne(); 

这回答了你的问题,但它仍然会让 UI 线程等待 - 你真的必须接受与 Silverlight 的异步,所以努力寻找一个在 DownloadStringCompleted 事件处理程序中更新你的模型的解决方案 - 那这样您就不必使用拐杖,您的应用程序将执行得更好。