【发布时间】:2010-08-21 16:40:31
【问题描述】:
每次我想让用户拖动控件时,我都会调用该控件的 DoDragDrop。
拖放工作正常,但我对周围的事情有疑问:
DoDragDrop 完全阻止表单,没有计时器事件跳转,没有处理任何绘制消息。
DoDragDrop 不仅会阻止拖放操作,还会阻止目标程序完成放置事件(即 explorer.exe 的吸吮代码)。依赖其他程序的代码很烂。
我想从一个新线程调用 DoDragDrop。
试过这个:
Thread dragThread = new Thread(() =>
{
Form frm = new Form();
frm.DoDragDrop("data", DragDropEffects.All);
});
dragThread.SetApartmentState(ApartmentState.STA);
dragThread.IsBackground = true;
dragThread.Start();
但它似乎不起作用。我的意思是:当像这样从其他线程执行 DoDragDrop 时,我的程序或其他程序中的其他控件不会接收拖放消息。
还有其他解决方案吗?
【问题讨论】:
-
要不要提供更多关于失败的信息而不是“它似乎不起作用”?
-
当像这样从其他线程执行 DoDragDrop 时,我的程序或其他程序中的其他控件不接收拖放消息。
标签: c# winforms multithreading drag-and-drop blocking