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

C# 有没有办法暂停ActiveX控件(MapPoint)或异步运行DoDragDrop?,c#,drag-and-drop,activex,mappoint,C#,Drag And Drop,Activex,Mappoint,我目前正在使用MapPoint控件开发一个应用程序,这给我带来了困难。 从mappoint也使用的线程启动DoDragDrop后,我总是在几秒钟后从mappoint收到一个对话框,说我的表单没有反应 MapPoint控件是一个ActiveX控件,使用控件MapPoint在后台启动并在不同的线程中运行。我认为Mappoint试图更新控件,但得到了一个超时 是否有方法在不同的线程中运行DoDragDrop,以便MapPoint从主线程获得响应。 或者是否可以告诉MapPoint我的表单当前已暂停。或

我目前正在使用MapPoint控件开发一个应用程序,这给我带来了困难。 从mappoint也使用的线程启动
DoDragDrop
后,我总是在几秒钟后从mappoint收到一个对话框,说我的表单没有反应

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

是否有方法在不同的线程中运行
DoDragDrop
,以便MapPoint从主线程获得响应。 或者是否可以告诉MapPoint我的表单当前已暂停。或者我可以暂停MapPoint吗


我已尝试使用表单控件和MapPoint控件运行
DoDragDrop
,我发现了问题

我已经在点击前
事件中触发了
DoDragDrop
。MapPoint可能会等待事件回调,但不会得到回调,因为
DoDragDrop
会将事件保持到释放鼠标为止

现在,我已经编写了一个事件,它启动
DoDragDrop
事件,该事件与单击之前的映射点
事件异步

代码:


这是否意味着MapPoint控件位于自己的线程上?我有点惊讶这能奏效。我在自己的线程上使用了MapPoint应用程序和其他东西,但您必须小心;Windows不喜欢使用相同控件的多个线程。从mappoint也使用的线程启动DoDragDrop后,…我想他的意思是在同一个线程中thread@winwaed:如edze所说,mappoint控件在主线程中运行,但由于begininvoke,InitDragDrop事件在mappoints 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);
}