2011-01-18 8 views
2

私は現在、MapPoint-Controlを使ってアプリケーションを開発しています。 mappointも使用するスレッドからDoDragDropを開始した後、私はいつも数秒後に私のフォームが反応しないと言っているmappointからのダイアログを受け取ります。ActiveXコントロール(MapPoint)を一時停止するか、DoDragDrop asyncを実行する方法はありますか?

MapPoint-ControlはActiveXコントロールで、MapPointコントロールをバックグラウンドで起動し、別のスレッドで実行します。私はMappointがコントロールを更新しようとしますが、タイムアウトを取得すると思います。

DoDragDropを別のスレッドで実行する方法があるため、MapPointはメインスレッドから応答を得ます。 MapPointに現在フォームが一時停止していることを伝えることは可能ですか?または、何とかMapPointを一時停止できますか?

私は、フォームコントロールとDoDragDropを実行しようとしたとのMapPoint、コントロール

答えて

2

と私は問題を発見しました。

-イベントでDoDragDropを発砲しました。おそらくMapPointはEventsコールバックを待つが、DoDragDropはマウスが離されるまでEventを保持し続けるため、MapPointはイベントコールバックを待機する可能性があります。

今度は、DoDragDropイベントをMapPoint BeforeClick -Eventに対して非同期で開始しました。

コード:


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); 
} 
+0

ことがMapPointのコントロールは、独自のスレッドであることを意味していますか?私は作品がちょっと驚いています。私は自分のスレッドでMapPointアプリケーションを他のものと併用しましたが、注意する必要があります。 Windowsでは同じコントロールを使用する複数のスレッドが好きではありません。 – winwaed

+0

同じマッポイングのスレッドからDoDragDropを開始した後...同じスレッドで彼が意味していると思います – edze

+0

@winwaed:マッチポイントコントロールがメインスレッドで実行されていますが、beginInvokeのおかげでInitDragDropイベントが発生しますmappoints BeforeClickイベントが終了した後。 – Wowa

関連する問題