我目前正在使用MapPoint-Control处理应用程序,这让我很难过。
从mappoint也使用的线程开始DoDragDrop
之后,我总是在几个secondes之后得到一个来自mappoint的对话框,说我的表单没有反应。
MapPoint-Control是一个ActiveX控件,使用控件MapPoint在后台启动并在不同的线程中运行。我认为Mappoint尝试更新控件但是会超时。
有没有办法在不同的线程中运行DoDragDrop
,所以MapPoint从mainthread获得响应。
或者是否可以告诉MapPoint我的表单目前已暂停。或者我可以以某种方式暂停MapPoint?
我尝试使用表单控件和MapPoint-Control
运行DoDragDrop
答案 0 :(得分:2)
我发现了问题。
我在DoDragDrop
- 事件上解雇了BeforeClick
。 MapPoint可能等待事件回调,但是没有得到一个,因为DoDragDrop
保持事件直到鼠标被释放。
现在我编写了一个事件,它将DoDragDrop
事件异步启动到MapPoint BeforeClick
- 事件。
代码:
public event InitDragDropHandler InitDragDrop;
public delegate void InitDragDropHandler(object sender, object data);
public main()
{
this.InitDragDrop += new InitDragDropHandler(main_InitDragDrop);
}
void mappoint_BeforeClick(object sender, AxMapPoint._IMappointCtrlEvents_BeforeClickEvent e)
{
if (InitDragDrop != null)
{
this.BeginInvoke(new ThreadStart(() =>
{
InitDragDrop(mappoint, pps);
}));
}
}
void main_InitDragDrop(object sender, object data)
{
((Control)sender).DoDragDrop(data, DragDropEffects.Copy);
}