我在c#winform编程中,有一段时间会不断从网上下载数据 这段时间主窗体会出现卡死现象 20

过段时间又恢复过来了怎样才能不使主窗体出现卡死现象呢,是不是要使用多线程?本人没使用过多线程,如果要使用该怎么用呢?最好能给出示例... 过段时间又恢复过来了
怎样才能不使主窗体出现卡死现象呢,是不是要使用多线程?
本人没使用过多线程,如果要使用 该怎么用呢?
最好能给出示例
展开
 我来答
百度网友d242235
2009-09-03 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:823万
展开全部
你可以用System.Net.WebClient这个类来下载数据,然后为它的下载事件绑定一个方法,因为事件是异步调用的,因此不会造成线程堵塞,给你一段代码看看吧
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

namespace WebClientAsync
{
public delegate void DownloadDelegate( byte[] b);

public class DownloadAsync
{
public event DownloadDelegate DownloadCompleted;
byte[] buf;

public void Downloadasync(string url)
{
WebClient wc = new WebClient();
wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
wc.DownloadDataAsync(new Uri(url));
}
void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
buf = e.Result;
if(DownloadCompleted!=null)
DownloadCompleted(buf);
}
}

class test
{
static void Main()
{
DownloadAsync download = new DownloadAsync();
download.DownloadCompleted += new DownloadDelegate(download_DownloadCompleted);
download.Downloadasync("http://www.baidu.com");

Console.Read();

}

static void download_DownloadCompleted(byte[] b)
{
byte[] buf = b;
string p = Encoding.GetEncoding("gb2312").GetString(buf);
Console.WriteLine(p);
}
}
}

这是个完整的控制台程序,效果为从百度首页http://www.baidu.com上下载数据,然后输出,你把那段下载好的字符串输出在WinForm窗体上就可以,不会造成窗体堵塞的,祝你顺利!
skynomadism
2009-09-03 · TA获得超过319个赞
知道小有建树答主
回答量:410
采纳率:100%
帮助的人:166万
展开全部
是不是要用多线程,那要看你在下载时,是不是允许进行其它的各类操作.
如果你的接下来的操作必须要等待数据下载后才能进行,那多线程也会很麻烦.

多线程其实没那么难.只要你把下载的部分进行很好的封装,多线程就是几句钱码的事.

Thread T = new Thread(new ThreadStart(YourDownLoadFunctionName));
T.Start();

private void YourDownLoadFunctionName()
{
//你的下载代码
//在一些可能消耗时间的地方或步骤中,记得加进Thread.Sleep(1)
//经验之谈
}
当然了,T的定义域要合适.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a5202003
2009-09-03 · TA获得超过2249个赞
知道大有可为答主
回答量:1885
采纳率:75%
帮助的人:594万
展开全部
在循环取数据的时候,,循环体里加上这句
Application.DoEvents()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lizhangyong420
2009-09-03 · TA获得超过206个赞
知道答主
回答量:299
采纳率:0%
帮助的人:198万
展开全部
使用多线程异步调用就不会出现这样的现象了,多线程是个比较麻烦的东西,三两句说不清楚,自己找找多线程的资料看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式