Есть ли способ приостановить элемент управления ActiveX (MapPoint) или запустить асинхронный DoDragDrop? - PullRequest
2 голосов
/ 18 января 2011

Я сейчас работаю над приложением с MapPoint-Control, что доставляет мне неприятности.После запуска DoDragDrop из потока, который также использует mappoint, через несколько секунд я всегда получаю диалог от mappoint, говорящий, что моя форма не реагирует.

MapPoint-Control - это ActiveX-Control,Использование элемента управления MapPoint начинается в фоновом режиме и запускается в другом потоке.Я думаю, что Mappoint пытается обновить элемент управления, но получает тайм-аут.

Есть ли способ запустить DoDragDrop в другом потоке, поэтому MapPoint получает ответ от mainthread.Или можно сказать MapPoint, что моя форма в данный момент приостановлена.Или я могу как-то приостановить MapPoint?

Я пытался запустить DoDragDrop с помощью элемента управления формы и MapPoint-Control

1 Ответ

2 голосов
/ 18 января 2011

Я нашел проблему.

Я выстрелил DoDragDrop в BeforeClick -Событие.MapPoint, вероятно, ожидает обратного вызова Events, но не получает его, потому что 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...