怎样让执行拖放的时候窗体不会出现"假死"?
我使用DoDragDrop方法拖放把文件复制到别的地方,可是复制文件这个时间很长,这时窗口会出现假死,等到拖放完成之后才会恢复....
可以通过创建新的线程去解决吗?怎么写?
我这样写没有效果...好像是新的线程没法接收到鼠标松开的信号~怎么办?
private void btn_DragSelecteds_MouseDown(object sender, MouseEventArgs e)
{
string[] mypathstr = new string[listView.CheckedItems.Count];
for (int i = 0; i < mypathstr.Length; i++)
{
mypathstr[i] = ((FileInfo)listView.CheckedItems[i].Tag).FullName;
}
doDragDropObj = new DataObject(DataFormats.FileDrop, mypathstr);
Thread myThread = new Thread(doDragDrop);
myThread.Start();
}
//------
private void doDragDrop() {
Control myctr = new Control();
myctr.DoDragDrop(doDragDropObj, DragDropEffects.All);
}
------解决方案--------------------复制文件的事件扔给委托去做
------解决方案--------------------要不用子线程去做也可以
------解决方案--------------------建议用委托。
------解决方案--------------------学习一下多线程编程技术。
------解决方案--------------------新的线程没法接收到鼠标松开的信号
---------------------------------------
你的线程是你自己定义的,你又没让它响应mouseup的事件。它当然不知道你什么时候松开的了。
你的这个线程是为了复制,可以加个循环,复制完成后把线程释放。
while(复制已完成)
myThread.abort();
复制已完成用什么来标志,你看看程序里用什么比较合适。建议把doDragDrop() 定义成bool,复制完成返回true。把这个值传回。
------解决方案--------------------BackGroundWorker,都封装好了,简单好用
------解决方案--------------------委托实现文件拷贝,参考一下:
//文件拷贝事件参数