2

我目前正在使用 MapPoint-Control 开发一个应用程序,这让我很难过。从 mappoint 也使用的线程启动后DoDragDrop,我总是在几秒钟后从 mappoint 得到一个对话框,说我的表单没有反应。

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

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

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

4

1 回答 1

2

我发现了问题。

我已经解雇DoDragDropBeforeClick-Event。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);
}
于 2011-01-18T14:01:34.730 回答