2

私は現在、MapPoint-Controlを使用してアプリケーションに取り組んでいるため、苦労しています。mappointも使用するスレッドから開始したDoDragDrop後、数秒後に、フォームが反応しないことを示すmappointからのダイアログが常に表示されます。

MapPoint-ControlはActiveX-Controlであり、MapPointがバックグラウンドで開始し、別のスレッドで実行されるコントロールを使用します。Mappointはコントロールを更新しようとしますが、タイムアウトになると思います。

別のスレッドで実行する方法があるDoDragDropので、MapPointはメインスレッドから応答を取得します。または、フォームが現在一時停止していることをMapPointに通知することはできますか。または、どういうわけかMapPointを一時停止できますか?

DoDragDropフォームコントロールとMapPoint-Controlを使用してを実行しようとしました

4

1 に答える 1

2

問題を見つけました。

-イベントで解雇DoDragDropしましたBeforeClickDoDragDropMapPointはおそらくイベントコールバックを待ちますが、マウスが離されるまでイベントを維持するため、コールバックを取得しないでください。

DoDragDropこれで、MapPoint-Eventに非同期でイベントを開始するイベントを作成しました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 に答える