【问题标题】:WebClient DownloadStringCompleted Never Fired in Console ApplicationWebClient DownloadStringCompleted 在控制台应用程序中从未触发
【发布时间】:2010-05-08 01:40:01
【问题描述】:

我不确定为什么根本没有触发回调方法。我正在使用 VS 2010。

 static void Main(string[] args)
        {
            try
            {
                var url = "some link to RSS FEED"; 
                var client = new WebClient();
                client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
                client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);

                client.DownloadStringAsync(new Uri(url));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message); 
            }
        }
        // THIS IS NEVER FIRED 
        static void client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            Console.WriteLine("something"); 
        }

        // THIS IS NEVER FIRED 
        static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            Console.WriteLine("do something");

            var rss = XElement.Parse(e.Result);

            var pictures = from item in rss.Descendants("channel")
                           select new Picture
                           {
                               Name = item.Element("title").Value
                           };

            foreach (var picture in pictures)
            {
                Console.WriteLine(picture.Name);
                Console.WriteLine(picture.Url);
            }

        }

【问题讨论】:

  • 你有没有得到这个答案?

标签: asp.net


【解决方案1】:

如果您调用DownloadDataAsync() 方法,则会触发DownloadDataCompleted 事件。如果你调用 DownloadStringAsync() 方法,DownloadStringCompleted 会被触发。

要触发 DownloadDataCompleted 事件,请尝试:

static void Main(string[] args) 
        { 
            try 
            { 
                var url = "http://blog.gravitypad.com";  
                //client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); 
                client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted); 

                client.DownloadDataAsync(new Uri(url)); 
                Console.ReadLine();
            } 
            catch (Exception ex) 
            { 
                Console.WriteLine(ex.Message);  
            } 
        } 

【讨论】:

  • 应该提过:DownloadDataAsync会以字节数组的形式返回结果,而DownloadStringAsync会以字符串的形式返回结果。
  • 正确,但您希望触发 DownloadDataCompleted 事件。只有 DownloadStringCompleted 甚至会触发...除非您调用 DownloadDataAsync。
  • 抱歉 - 我刚刚意识到您是在说 noither 事件正在触发。当我测试您的代码时,我确实会触发一个事件或另一个事件......我看到“做某事”或“某事”,具体取决于我调用的方法。很抱歉造成混乱。
  • 嗯我不知道为什么没有一个事件对我触发!感谢您的帮助!
  • 呃。与 DownloadFileCompleted 和注册错误事件有相同的问题。感谢您的帖子。
【解决方案2】:

我遇到了这个问题,并意识到 uri 不正确。我的意思是除非文件被正确读取,否则事件不会触发。所以我将我的 xml 文件放在 ClientBin 中,它就像魔术一样工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2010-10-15
    • 2020-01-24
    • 1970-01-01
    • 2022-11-24
    • 2022-08-11
    • 1970-01-01
    相关资源
    最近更新 更多