日期:2014-05-17  浏览次数:21432 次

C# winform 拷贝文件 未响应 如何解决
用C#做的界面 开了一个线程用来专门传输文件,但是文件太大界面就会出现未响应的状况。开的这个线程
是委托给form的,

不知这个问题如何解决,特来请教大家。

------解决方案--------------------
如果是大文件拷贝,你可能要换思路,不能简单的用File.Copy来,要自己在线程读写文件来实现大文件拷贝

你参考一下这个
C# 最快的大文件拷贝方法 
------解决方案--------------------
做一个传输进度条,在事件里面写或是新开一个线程.保证进度条不卡,你的程序就不会卡了.
------解决方案--------------------
有进度条用户体验也好是吧
------解决方案--------------------
我只处理过下载的.在事件里完成不会卡.给你参考

        //下载过程处理
        private void MyWebClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
        { 
            this.PBar_DonwLoad.Value = e.ProgressPercentage;
            if (e.ProgressPercentage != 100)
            {               
                this.BT_Login.Text = "更新:" + e.ProgressPercentage.ToString() + "%";
            }
        }
------解决方案--------------------
引用:
引用:如果是大文件拷贝,你可能要换思路,不能简单的用File.Copy来,要自己在线程读写文件来实现大文件拷贝

你参考一下这个
C# 最快的大文件拷贝方法

亲,我想问问,他这个文章中到底是用缓存啦,还是不用缓存啦,缓存多大合适啦。

亲,他用了缓存,缓存大小是1024*1024*32
------解决方案--------------------
建议你用BackgroundWorker这样至少界面不会卡死

      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
             传输文件
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
             报告进度
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            完成作业
        }
------解决方案--------------------
工具箱里有一个 BackgroundWorker的组件,然后添加到你的winform画面

然后在他的事件做你要做的事情,它其实就是工作进程的组件,在DoWork中它创建进程处理你工作,ProgressChanged事件里回报你进展到哪里,最后完成工作进入RunWorkerCompleted事件

其实你百度下BackgroundWorker 就知道怎么用了
------解决方案--------------------
哦,我以为你只是要解决界面卡掉的问题,不好意思,巨文件我没有研究呵呵!
------解决方案--------------------
引用:
http://www.cnblogs.com/tiasys/archive/2009/11/30/1614016.html