Dispatcher.BeginInvoke(ActivateActionTool);
Try to execute your code asynchrounously from your event handler.
Try to execute your code asynchrounously from your event handler.
Something like :Dispatcher.BeginInvoke(ActivateActionTool);
protected void AttachMeasureAction(Map map)
{
if (!MeasureActionSelected && map != null)
{
MeasureActionSelected = true;
//ToolLock = true;
map.Layers.CollectionChanged += Layers_CollectionChanged;
MeasureAction.Attach(map);
MeasureAction.Execute();
}
}
protected void StartMeasureAction()
{
DisableMeasureAction();
foreach (Map map in InternalMaps)
{
map.PreviewMouseDown += Map_PreviewMouseDown;
map.Cursor = Cursors.Hand; //Need to reset cursor because measure action changes it upon finish
}
}
protected void DisableMeasureAction()
{
MeasureAction.Detach();
foreach (Map map in InternalMaps)
map.PreviewMouseDown -= Map_PreviewMouseDown;
MeasureActionSelected = false;
//ToolLock = false;
}
//Events
protected void Map_PreviewMouseDown(Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
DisableMeasureAction();
AttachMeasureAction((Map)sender);
}
protected void Layers_CollectionChanged(Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//Restart measure action when finished
if(MeasureActionSelected)
{
if (e.OldItems != null)
{
for (Int32 i = 0; i < e.OldItems.Count; i++)
{
if (e.OldItems is GraphicsLayer && ((GraphicsLayer)e.OldItems).ID == null)
{
StartMeasureAction();
break;
}
}
}
}
}
