datetimepicker c# ejemplo




DatePicker lanza una excepción al cambiar el mes (4)

Cambiar el mes de un DatePicker lanza esta excepción:

System.Windows.Automation.ElementNotAvailableException: 'El elemento no existe o está virtualizado; use el patrón de VirtualizedItem si es compatible. '

El seguimiento de la pila:

at MS.Internal.Automation.ElementUtil.Invoke (AutomationPeer peer, DispatcherOperationCallback work, Object arg) en MS.Internal.Automation.ElementProxy.GetPropertyValue (propiedad Int32)

Creé un proyecto simple con un solo DatePicker en la ventana principal y da la misma excepción.

<DatePicker x:Name="datePicker1" Width="150" />

Versión de .NET Framework: 4.6

Encontré el mismo problema en una question 6 años, ¡pero no hay respuesta hasta ahora!

Editar :

Probé diferentes versiones de .NET Framework: 4.5, 4.6.1, y el problema sigue siendo el mismo.


(Como necesitaba algo de diversión) Traté de investigar un poco sobre su caso y pude reproducir la excepción mencionada. Al habilitar el paso a la fuente de .NET Framework y cualquier otra cosa que encontré, pude identificar la excepción al método Invoke de la clase ElementUtil en PresentationCore.dll . El código correspondiente del método se ve así:

internal static object Invoke(AutomationPeer peer, DispatcherOperationCallback work, object arg)
{
    Dispatcher dispatcher = peer.Dispatcher;

    // Null dispatcher likely means the visual is in bad shape!
    if( dispatcher == null )
    {
        throw new ElementNotAvailableException();
    }

    Exception remoteException = null;
    bool completed = false;

    object retVal = dispatcher.Invoke(            
        DispatcherPriority.Send,
        TimeSpan.FromMinutes(3),
        (DispatcherOperationCallback) delegate(object unused)
        {
            try
            {
                return work(arg);
            }
            catch(Exception e)
            {
                remoteException = e;
                return null;
            }
            catch        //for non-CLS Compliant exceptions
            {
                remoteException = null;
                return null;
            }
            finally
            {
                completed = true;
            }

        },
        null);

    if(completed)
    {
        if(remoteException != null)
        {
            throw remoteException;
        }
    }
    else
    {
        bool dispatcherInShutdown = dispatcher.HasShutdownStarted;

        if(dispatcherInShutdown)
        {
            throw new InvalidOperationException(SR.Get(SRID.AutomationDispatcherShutdown));
        }
        else
        {
            throw new TimeoutException(SR.Get(SRID.AutomationTimeout));
        }
    }

    return retVal;

}

Teniendo en cuenta este código, la única razón posible (en mi opinión) es que el despachador especificado sea null . Aunque encuentro el comentario

// ¡El despachador nulo probablemente significa que la imagen está en mal estado!

Curioso, en realidad no tengo idea de por qué este es el caso. Me cansé de depurar ese hecho pero no pude obtener ninguna información significativa. Solo siguiendo stacktrace (que abrió mis ojos nuevamente sobre lo que está pasando si "simplemente hacemos clic en un botón"):

PresentationCore.dll!MS.Internal.Automation.ElementUtil.Invoke(System.Windows.Automation.Peers.AutomationPeer peer, System.Windows.Threading.DispatcherOperationCallback work, object arg)
PresentationCore.dll!MS.Internal.Automation.ElementProxy.GetPropertyValue(int property)
[Native to Managed Transition]
UIAutomationCore.dll!ProviderCallouts::RawGetPropertyValue(struct IRawElementProviderSimple *,int,struct tagVARIANT *)
UIAutomationCore.dll!ProviderCallouts::GetPropertyValue(struct IRawElementProviderSimple *,unsigned short,class ProviderEntryPoint *,int,struct tagVARIANT *)
UIAutomationCore.dll!InProcClientAPIStub::GetPropertyValue(char *)
UIAutomationCore.dll!InProcClientAPIStub::InvokeInProcAPI(struct ITargetContextInvoker *,enum Protocol_MethodId,...)
UIAutomationCore.dll!AccessibleProxy::IsControl(struct IRawElementProviderFragment *,struct ITargetContextInvoker *)
UIAutomationCore.dll!AccessibleProxy::NormalizeUpwards(struct IRawElementProviderFragment *,struct ITargetContextInvoker *,struct IRawElementProviderFragment * *)
UIAutomationCore.dll![thunk]:EditProxy::Release`adjustor{32}' (void)
UIAutomationCore.dll![email protected]()
[Managed to Native Transition]
UIAutomationProvider.dll!MS.Internal.Automation.UiaCoreProviderApi.UiaReturnRawElementProvider(System.IntPtr hwnd = 0x000406ce, System.IntPtr wParam = 0xffffffff, System.IntPtr lParam = 0x00000149, System.Windows.Automation.Provider.IRawElementProviderSimple el = {MS.Internal.Automation.ElementProxy})
UIAutomationProvider.dll!System.Windows.Automation.Provider.AutomationInteropProvider.ReturnRawElementProvider(System.IntPtr hwnd = 0x000406ce, System.IntPtr wParam = 0xffffffff, System.IntPtr lParam = 0x00000149, System.Windows.Automation.Provider.IRawElementProviderSimple el = {MS.Internal.Automation.ElementProxy})
PresentationCore.dll!System.Windows.Interop.HwndTarget.CriticalHandleWMGetobject(System.IntPtr wparam, System.IntPtr lparam, System.Windows.Media.Visual root, System.IntPtr handle)
PresentationCore.dll!System.Windows.Interop.HwndTarget.HandleMessage(MS.Internal.Interop.WindowMessage msg, System.IntPtr wparam, System.IntPtr lparam)
PresentationCore.dll!System.Windows.Interop.HwndSource.HwndTargetFilterMessage(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled = false)
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 0x000406ce, int msg = 0x0000003d, System.IntPtr wParam = 0xffffffff, System.IntPtr lParam = 0x00000149, ref bool handled = false)
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o)
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs)
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler = null)
WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs)
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 0x000406ce, int msg = 0x0000003d, System.IntPtr wParam = 0xffffffff, System.IntPtr lParam = 0x00000149)
[Native to Managed Transition]
user32.dll![email protected]()
user32.dll!InternalCallWinProc()
user32.dll!UserCallWinProcCheckWow(struct _ACTIVATION_CONTEXT *,void *,struct HWND__ *,enum _WM_VALUE,unsigned int,long,void *,int)
user32.dll![email protected]()
user32.dll![email protected]()
ntdll.dll![email protected]()
user32.dll![email protected]()
oleacc.dll!NativeIAccessibleFromWindow(unsigned long,unsigned long,struct HWND__ *,unsigned long,struct _GUID const &,void * *)
oleacc.dll![email protected]()
oleacc.dll![email protected]()
oleacc.dll![email protected]()
oleacc.dll![email protected]()
msctf.dll![email protected]()
msctf.dll!CThreadInputMgr::OnAccFocusEvent()
msctf.dll!WinEventProc()
user32.dll![email protected]()
ntdll.dll![email protected]()
[Managed to Native Transition]
UIAutomationProvider.dll!MS.Internal.Automation.UiaCoreProviderApi.UiaRaiseAutomationEvent(System.Windows.Automation.Provider.IRawElementProviderSimple provider = {MS.Internal.Automation.ElementProxy}, int eventId = 0x00004e25)
UIAutomationProvider.dll!System.Windows.Automation.Provider.AutomationInteropProvider.RaiseAutomationEvent(System.Windows.Automation.AutomationEvent eventId = {System.Windows.Automation.AutomationEvent}, System.Windows.Automation.Provider.IRawElementProviderSimple provider = {MS.Internal.Automation.ElementProxy}, System.Windows.Automation.AutomationEventArgs e = {System.Windows.Automation.AutomationEventArgs})
PresentationCore.dll!System.Windows.Automation.Peers.AutomationPeer.RaiseAutomationEvent(System.Windows.Automation.Peers.AutomationEvents eventId)
PresentationCore.dll!System.Windows.Automation.Peers.AutomationPeer.RaiseFocusChangedEventHelper(System.Windows.IInputElement newFocus)
PresentationCore.dll!System.Windows.Input.KeyboardDevice.ChangeFocus(System.Windows.DependencyObject focus, int timestamp)
PresentationCore.dll!System.Windows.Input.KeyboardDevice.TryChangeFocus(System.Windows.DependencyObject newFocus, System.Windows.Input.IKeyboardInputProvider keyboardInputProvider, bool askOld, bool askNew, bool forceToNullIfFailed)
PresentationCore.dll!System.Windows.Input.KeyboardDevice.Focus(System.Windows.DependencyObject focus, bool askOld, bool askNew, bool forceToNullIfFailed)
PresentationCore.dll!System.Windows.Input.KeyboardDevice.Focus(System.Windows.IInputElement element)
PresentationCore.dll!System.Windows.UIElement.Focus()
PresentationFramework.dll!System.Windows.Input.KeyboardNavigation.Navigate(System.Windows.DependencyObject currentElement, System.Windows.Input.TraversalRequest request, System.Windows.Input.ModifierKeys modifierKeys, System.Windows.DependencyObject firstElement)
PresentationFramework.dll!System.Windows.FrameworkElement.MoveFocus(System.Windows.Input.TraversalRequest request)
PresentationFramework.dll!System.Windows.Controls.Primitives.CalendarItem.FocusDate(System.DateTime date)
PresentationFramework.dll!System.Windows.Controls.Calendar.OnCalendarButtonPressed(System.Windows.Controls.Primitives.CalendarButton b, bool switchDisplayMode)
PresentationFramework.dll!System.Windows.Controls.Primitives.CalendarItem.Month_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget)
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target)
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs)
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.Primitives.CalendarButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true)
PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject sender = {System.Windows.Controls.Primitives.CalendarButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent)
PresentationCore.dll!System.Windows.UIElement.OnMouseUpThunk(object sender, System.Windows.Input.MouseButtonEventArgs e)
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget)
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target)
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs)
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Shapes.Rectangle}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false)
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {System.Windows.Shapes.Rectangle}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs})
PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs})
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted)
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea()
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input)
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport)
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel)
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = 0x000406ce, MS.Internal.Interop.WindowMessage msg = WM_LBUTTONUP, System.IntPtr wParam = 0x00000000, System.IntPtr lParam = 0x005b0066, ref bool handled = false)
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 0x000406ce, int msg = 0x00000202, System.IntPtr wParam = 0x00000000, System.IntPtr lParam = 0x005b0066, ref bool handled = false)
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 0x000406ce, int msg = 0x00000202, System.IntPtr wParam = 0x00000000, System.IntPtr lParam = 0x005b0066, ref bool handled = false)
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o)
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs)
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler = null)
WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs)
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 0x000406ce, int msg = 0x00000202, System.IntPtr wParam = 0x00000000, System.IntPtr lParam = 0x005b0066)
[Native to Managed Transition]
user32.dll![email protected]()
user32.dll!InternalCallWinProc()
user32.dll!UserCallWinProcCheckWow(struct _ACTIVATION_CONTEXT *,void *,struct HWND__ *,enum _WM_VALUE,unsigned int,long,void *,int)
user32.dll![email protected]()
user32.dll![email protected]()
WindowsBase.ni.dll!69d4936c()
[Frames below may be incorrect and/or missing, native debugger attempting to walk managed call stack]
[Managed to Native Transition]
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame})
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame)
PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore)
PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window)
PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window)
PresentationFramework.dll!System.Windows.Application.Run()
WpfApp1.exe!WpfApp1.App.Main()
[Native to Managed Transition]
mscoreei.dll![email protected]()
mscoree.dll![email protected]()
mscoree.dll![email protected]()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll![email protected]()

Solo por diversión, aquí está el mismo seguimiento de pila que el anterior en forma gráfica:

Así que mi conclusión es que ...

  • ... La respuesta de Mike Strobel es la más cercana que he visto
  • ... a partir de ahora yo mismo soy curioso

Es difícil reproducir tu problema. Las siguientes sugerencias pueden ayudarte:

  • Otro proceso puede afectar a su programa. ¿ UISpy utilidades como Snoop o UISpy ?

  • Su problema puede estar relacionado con un hardware de bajo rendimiento o un error de software del proveedor. Vea here respuesta para resolver este problema.

  • Su problema puede estar relacionado con la prestación de una copia del control de interfaz de usuario que no existe por alguna razón. Vea esta discusión para más detalles.


Si te fijas en la documentación de microsoft dice:

Esta excepción puede producirse si el elemento estaba en un cuadro de diálogo que se cerró o una aplicación que se cerró o finalizó.

¿Podría ser posible que esté cerrando la ventana en un evento "cambiar mes"?


Una posible solución sería intentar, capturar, finalmente la excepción de UIAnimation y no generar ningún evento (cuadros de mensajes, registros de errores) cuando ocurra. Solo deja que el código continúe como si nada hubiera pasado.





datepicker