日期:2014-05-18  浏览次数:20762 次

俺最近学C#,写了一个文件下载器,可是在下载的过程中程序往往一直卡住,直到下载差不多的时候画面又恢复正常!有何高招呢大家
C# code

 public static string GetHtml(string URL, string cookie, out string header, string server)
        {
            HttpWebRequest httpWebRequest;
            HttpWebResponse webResponse;
            Stream getStream;
            StreamReader streamReader;
            string getString = "";
            httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
            httpWebRequest.Accept = "*/*";
            httpWebRequest.Referer = "http://www.xxxx.com.cn/Index/logincheck";
            CookieContainer co = new CookieContainer();
            co.SetCookies(new Uri(server), cookie);
            httpWebRequest.CookieContainer = co;
            httpWebRequest.UserAgent =
                "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
            httpWebRequest.Method = "GET";
            webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            header = webResponse.Headers.ToString();
            getStream = webResponse.GetResponseStream();
            streamReader = new StreamReader(getStream, Encoding.UTF8);
            getString = streamReader.ReadToEnd();      
            streamReader.Close();
            getStream.Close();
            return getString;
        }


这是俺使用的一个方法。。

------解决方案--------------------
把下载进程弄成后台进程,就能解决问题.

但是实际意义不大.
------解决方案--------------------
异步下载 或者将同步下载放在单独线程/线程池

.Begin .End 开头的 是 异步函数 可以参看msdn库
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/ms229675(v=vs.80).aspx

说的再多,也没msdn说的全,希望能给你帮助
------解决方案--------------------
同步执行就是这个样子了。

看看这些文章,会有帮助:
C#多线程与UI响应 防界面假死
http://blog.csdn.net/nnsword/article/details/5543464

C#使用委托与多线程,解决界面假死
http://wangheng.org/use-multiple-threads-resolve-interface-feign-death.html