Я видел пару исключений при отладке (VS 2015), возникающих при нажатии в текстовом поле.Они не всегда происходят, но они, кажется, всегда происходят при одних и тех же обстоятельствах (я не могу найти шаблон, который бы это объяснил).Похоже, что они происходят только один раз - если я продолжу, игнорируя их, я не увижу, чтобы они повторились.Они также не имеют отношения к конкретному текстовому полю.Мой код представляет собой гибрид существующего кода и кода надстройки, и та же проблема возникает в коде, который я не затрагивал.
Я пытался создать очень простой проект с одним текстовым полем в окне, но у меня нетне видел проблемы там (но, опять же, это происходит не во всех случаях, во всяком случае).
Я не могу поймать их при попытке-поймать - отладчик обнаруживает их, когда они выбрасываются, но этоПохоже, что Microsoft ловит их внутренне, а не выбрасывает их код.Если я пытаюсь работать вне отладчика, моя try-catch ничего не ловит, и код работает без видимых проблем.
Первым является исключение ArgumentNullException, выданное mscorlib.dll.Если я продолжу после того, как это будет сгенерировано, PresentationCore.dll сгенерирует исключение PlatformNotSupportedException.Если я продолжу после этого, мой код, кажется, будет работать нормально.
Я приведу подробности ниже, но мне интересно, так как они кажутся внутренне обработанными в коде Microsoft (и кажутся не связанными с моим кодом), если я простопредположить, это было то, что я никогда не собирался увидетьЕсли это не так, может ли кто-нибудь подсказать, что здесь может происходить или как я могу отладить это?
Моя платформа - Windows 7, я собираюсь с «Любым ЦП», а текущая целевая платформа - .Net.4.5.2 (но я пробовал это с фреймворками до 4.6.1 без видимых изменений).
Исходное исключение:
System.ArgumentNullException occurred
HResult=-2147467261
Message=Value cannot be null.
Parameter name: type
ParamName=type
Source=mscorlib
StackTrace:
at System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.GetActivationFactory(Type type)
InnerException:
Часть стека вызовов, когда это выбрасывается:
mscorlib.dll!System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.GetActivationFactory(System.Type type) Line 1279 C#
PresentationCore.dll!MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane.GetWinRtActivationFactory(bool forceInitialization) Unknown
PresentationCore.dll!MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane.InputPane() Unknown
[Native to Managed Transition]
[Managed to Native Transition]
PresentationCore.dll!MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane.GetForWindow(System.Windows.Interop.HwndSource source = {System.Windows.Interop.HwndSource}) Unknown
PresentationCore.dll!MS.Internal.Interop.TipTsfHelper.Show(System.Windows.DependencyObject focusedObject) Unknown
PresentationCore.dll!System.Windows.UIElement.Focus() Unknown
PresentationFramework.dll!System.Windows.Documents.TextEditorMouse.MoveFocusToUiScope(System.Windows.Documents.TextEditor This = {System.Windows.Documents.TextEditor}) Unknown
PresentationFramework.dll!System.Windows.Documents.TextEditorMouse.OnMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationFramework.dll!System.Windows.Controls.Primitives.TextBoxBase.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e) Unknown
PresentationCore.dll!System.Windows.UIElement.OnMouseDownThunk(object sender = {System.Windows.Controls.TextBox}, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) Unknown
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) Unknown
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) Unknown
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.Grid}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {System.Windows.Controls.Grid}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted) Unknown
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() Unknown
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) Unknown
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) Unknown
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) Unknown
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = {System.IntPtr}, MS.Internal.Interop.WindowMessage msg = WM_LBUTTONDOWN, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Unknown
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler = null) Unknown
WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) Unknown
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}) Unknown
[Native to Managed Transition]
Код mscorlib, выбрасывающий исключение (из-за параметра нулевого типа):
[SecurityCritical]
public static IActivationFactory GetActivationFactory(Type type)
{
if (type == null)
throw new ArgumentNullException("type");
if (type.IsWindowsRuntimeObject && type.IsImport)
{
return (IActivationFactory)Marshal.GetNativeActivationFactory(type);
}
else
{
#if FEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION
return GetManagedActivationFactory(type);
#else
// Managed factories are not supported so as to minimize public surface (and test effort)
throw new NotSupportedException();
#endif
}
}
Если я выйду за пределы этого исключения, он выдаст следующее:
System.PlatformNotSupportedException occurred
HResult=-2146233031
Message=Operation is not supported on this platform.
Source=PresentationCore
StackTrace:
at MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane..ctor(Nullable`1 hwnd)
InnerException:
И частичный стек вызовов в этой точке:
PresentationCore.dll!MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane.InputPane(System.IntPtr? hwnd) Unknown
PresentationCore.dll!MS.Internal.WindowsRuntime.Windows.UI.ViewManagement.InputPane.GetForWindow(System.Windows.Interop.HwndSource source) Unknown
PresentationCore.dll!MS.Internal.Interop.TipTsfHelper.Show(System.Windows.DependencyObject focusedObject) Unknown
PresentationCore.dll!System.Windows.UIElement.Focus() Unknown
PresentationFramework.dll!System.Windows.Documents.TextEditorMouse.MoveFocusToUiScope(System.Windows.Documents.TextEditor This = {System.Windows.Documents.TextEditor}) Unknown
PresentationFramework.dll!System.Windows.Documents.TextEditorMouse.OnMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationFramework.dll!System.Windows.Controls.Primitives.TextBoxBase.OnMouseDown(System.Windows.Input.MouseButtonEventArgs e) Unknown
PresentationCore.dll!System.Windows.UIElement.OnMouseDownThunk(object sender = {System.Windows.Controls.TextBox}, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) Unknown
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) Unknown
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) Unknown
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.Grid}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {System.Windows.Controls.Grid}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted) Unknown
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() Unknown
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) Unknown
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) Unknown
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) Unknown
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = {System.IntPtr}, MS.Internal.Interop.WindowMessage msg = WM_LBUTTONDOWN, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}, ref bool handled = false) Unknown
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Unknown
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler = null) Unknown
WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) Unknown
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = {System.IntPtr}, int msg = 513, System.IntPtr wParam = {System.IntPtr}, System.IntPtr lParam = {System.IntPtr}) Unknown
[Native to Managed Transition]
[Managed to Native Transition]
Исходя из этого, все работает как положено.