程序界面无响应
我的程序在执行过程中会从远程拷贝些大数据, 如果执行后不在点击,程序运行正常, 但只要一点击界面,就会出现没有响应,有什么办法能解决呢?
还有我想问一下,在文件拷贝的时候怎么中途退出? 希望大家给点意见
- VB.NET code
fs = File.OpenRead(S_path + "\" + files1(n)) fs1 = File.OpenWrite(loc_name) Do im = fs.Read(temp, old_check, temp.Length) fs1.Write(temp, 0, temp.Length) pb1.Value = pb1.Value + im Loop Until im = 0 fs.Close() fs1.Flush() fs1.Close() fs.Dispose() fs1.Dispose()
这是我的拷贝过程
[解决办法]
如果要学须最简单的基础知识,可以从 BackgroundWorker 组件开始。这个东西具有通用性,从winform到silverlight都支持。
[解决办法]
1.把文件复制过程包装在另一个进程里执行,比较简单的包括BackgroundWorker,System.Threading.ThreadPool.QueueUserWorkItem,System.Threading.Tasks.Task.Factory.StartNew。
2.确定取消通知的方式。比如调用BackgroundWorker的CancelAsync方法,或在取消时通过System.Threading.Thread.VolatileWrite改变一个Boolean变量,抑或是使用TPL提供的System.Threading.CancellationTokenSource/System.Threading.CancellationToken
3.修改循环条件,判断是否请求取消。比如判断BackgroundWorker.CancellationPending属性,或是线程同步的Boolean变量,又或是CancellationToken.IsCancellationRequested
[解决办法]
fs = File.OpenRead(S_path + "\" + files1(n))
fs1 = File.OpenWrite(loc_name)
Do
im = fs.Read(temp, old_check, temp.Length)
fs1.Write(temp, 0, temp.Length)
pb1.Value = pb1.Value + im
application.doevents
Loop Until im = 0
fs.Close()
fs1.Flush()
fs1.Close()
fs.Dispose()
fs1.Dispose()
[解决办法]
fs = File.OpenRead(S_path + "\" + files1(n))
fs1 = File.OpenWrite(loc_name)
Do
im = fs.Read(temp, old_check, temp.Length)
fs1.Write(temp, 0, temp.Length)
pb1.Value = pb1.Value + im
application.doevents
Loop Until im = 0
fs.Close()
fs1.Flush()
fs1.Close()
fs.Dispose()
fs1.Dispose()