c#编程如何避免程序未响应出现

zzyook 2012-12-01 12:13:14
WebClient client = new WebClient();
richTextBox1.Text = client.DownloadString(网址);
这是一个获取网页内容的代码,程序运行就先未响应几秒钟,然后才把网页内容显示出来 ,如何让程序未响应这段时间让窗体正常?
...全文
486 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hauk 2012-12-01
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
http://cn.bing.com/search?q=.net+webclient.downloadstringasync+&qs=n&pq=.net+webclient.downloadstringasync+&sc=0-0&sp=-1&sk=&intlF=&upl=zh-chs
嗯,用WebClient自带的异步更好:

        private void button2_Click(object sender, EventArgs e)
        {
            WebClient wc = new WebClient();
            wc.DownloadStringAsync(new Uri("http://www.baidu.com"));
            wc.DownloadStringCompleted += wc_DownloadStringCompleted;
        }

        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            textBox1.Text = e.Result;
        }
Hauk 2012-12-01
  • 打赏
  • 举报
回复
这时因为访问网络需要一定的时间,而程序默认是单线程的,就造成了线程阻塞。 使用多线程即可:

        private void button2_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(GetString);
            th.IsBackground = true;
            th.Start();
        }

        public void GetString()
        {
            WebClient client = new WebClient();
            string result = client.DownloadString(网址);
            this.Invoke(new Action(() => this.richTextBox.Text = result));
        }
yaotomo 2012-12-01
  • 打赏
  • 举报
回复
使用子线程加载,而不用UI线程。
zzyook 2012-12-01
  • 打赏
  • 举报
回复
还有就是为什么不立马把网页内容显示出来?非要未响应几秒钟才显示出来,难道跟端口有关吗
CheneyMa1s 2012-12-01
  • 打赏
  • 举报
回复
WebClient类有异步方法。
stonespace 2012-12-01
  • 打赏
  • 举报
回复
要么用多线程,要么异步,
Hauk 2012-12-01
  • 打赏
  • 举报
回复
引用 6 楼 zzyook 的回复:
引用 3 楼 haukwong 的回复:这时因为访问网络需要一定的时间,而程序默认是单线程的,就造成了线程阻塞。 使用多线程即可: C# code?? 1234567891011121314 private void button2_Click(object sender, EventArgs e) { ……
跨线程访问控件,就需要Invoke。 相当于括号里面的代码回归到主线程。
zzyook 2012-12-01
  • 打赏
  • 举报
回复
引用 3 楼 haukwong 的回复:
这时因为访问网络需要一定的时间,而程序默认是单线程的,就造成了线程阻塞。 使用多线程即可: C# code?? 1234567891011121314 private void button2_Click(object sender, EventArgs e) { Thread th = new Thread(……
this.Invoke(new Action(() => this.richTextBox.Text = result)); 你这句是什么意思,有什么作用?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧