C# 有没有办法暂停ActiveX控件(MapPoint)或异步运行DoDragDrop?
我目前正在使用MapPoint控件开发一个应用程序,这给我带来了困难。 从mappoint也使用的线程启动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我的表单当前已暂停。或
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);
}