C# Web抓取事件处理程序在按下“开始”按钮后卡住-Windows Phone 7
我编写了一个Eventhandler异步调用,通过该调用,我下载了任何网页的源字符串HTML,我通过文本框输入URL并将其传递给调用Eventhandler的方法,这可以正常工作,除非: 我打开应用程序,不做任何操作,然后按开始按钮,打开浏览器,将任何链接复制到某个页面,再次按开始按钮并运行应用程序,然后当我将该链接粘贴到文本框并尝试将其删除时,它会被我的进度指示器卡在无限循环中,我尝试刷新页面,但没有任何帮助,下面是代码:C# Web抓取事件处理程序在按下“开始”按钮后卡住-Windows Phone 7,c#,windows-phone-7,C#,Windows Phone 7,我编写了一个Eventhandler异步调用,通过该调用,我下载了任何网页的源字符串HTML,我通过文本框输入URL并将其传递给调用Eventhandler的方法,这可以正常工作,除非: 我打开应用程序,不做任何操作,然后按开始按钮,打开浏览器,将任何链接复制到某个页面,再次按开始按钮并运行应用程序,然后当我将该链接粘贴到文本框并尝试将其删除时,它会被我的进度指示器卡在无限循环中,我尝试刷新页面,但没有任何帮助,下面是代码: public void LoadSiteContent(string
public void LoadSiteContent(string url)
{
//create a new WebClient object
var indicator = new ProgressIndicator
{
IsVisible = true,
IsIndeterminate = true,
Text = "Downloading Source..."
};
try
{
SystemTray.SetProgressIndicator(this, indicator);
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCallback2);
client.DownloadStringAsync(new Uri(url));
}
catch (Exception ex)
{
if (ex is TimeoutException || ex is WebException)
{
MessageBox.Show("It seems there is no response from the remote server (are you connected to the internet?)");
}
}
}
private void DownloadStringCallback2(Object sender, DownloadStringCompletedEventArgs e)
{
if (!e.Cancelled && e.Error == null)
{
//Do whatever with the downloaded string (e.Result)
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
string Entered_URL = "";
Entered_URL = Enter_URL_Text.Text; //Stored from the textbox
LoadSiteContent(Entered_URL);
}
我该怎么做?谢谢 我试过你的代码,效果很好。我认为它似乎陷入了无限循环,因为ProgressIndicator。您需要在DownloadStringCallback2方法中更改它的IsIndeterminate和Text属性 尝试将以下代码添加到DownloadStringCallback2方法:
private void DownloadStringCallback2(Object sender, DownloadStringCompletedEventArgs e)
{
var indicator = SystemTray.GetProgressIndicator(this);
indicator.IsIndeterminate = false;
indicator.Text = "";
if (!e.Cancelled && e.Error == null)
{
MessageBox.Show("Page load complete.");
//Do whatever with the downloaded string (e.Result)
}
}
看看它是否能像预期的那样工作。好的,这确实解决了进度指示器的另一个问题,但我的原始问题仍然存在,这很奇怪,在完成了我在主要帖子中发布的步骤后,它似乎卡在了LoadSiteContent函数中,永远无法显示下载的字符串,然后在打开浏览器的同一页上有一个超链接按钮,如果我单击该按钮,打开浏览器并使用手机上的“后退”按钮返回,然后在所有步骤完成后尝试刮除,它会工作…嗯。。。可能它在try块中抛出了一个异常,该异常被您的catch块悄悄捕获。尝试删除Try-catch块并在调试器下运行。如果您遇到异常,请告诉我。删除了它们,没有,没有捕获异常=/更让我困惑的是,一旦它没有显示结果,我就用该页面上的另一个按钮调用浏览器,然后单击“上一步”,然后试着刮削&它可以工作……这是否与我在单击开始按钮和所有按钮后执行步骤后在后面维护的某个会话/堆栈有关?但是,既然我在完成第一篇文章中的步骤后从头开始启动应用程序,那怎么可能呢?我想,如果我能在单击“开始”按钮时完全关闭应用程序,它就会解决这个问题。