有没有办法暂停ActiveX控件(MapPoint)或运行DoDragDrop异步?

时间:2011-01-18 10:40:43

标签: c# drag-and-drop activex mappoint

我目前正在使用MapPoint-Control处理应用程序,这让我很难过。 从mappoint也使用的线程开始DoDragDrop之后,我总是在几个secondes之后得到一个来自mappoint的对话框,说我的表单没有反应。

MapPoint-Control是一个ActiveX控件,使用控件MapPoint在后台启动并在不同的线程中运行。我认为Mappoint尝试更新控件但是会超时。

有没有办法在不同的线程中运行DoDragDrop,所以MapPoint从mainthread获得响应。 或者是否可以告诉MapPoint我的表单目前已暂停。或者我可以以某种方式暂停MapPoint?

我尝试使用表单控件和MapPoint-Control

运行DoDragDrop

1 个答案:

答案 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);
}