-1

環境 Windows XP 、Outlook 2003

  1. 使用してOutlookアドレス帳を開くWPFコンポーネントがありますInterop.MAPI

  2. ユーザーは複数の受信者を選択して [OK] を選択すると、アドレス帳が閉じます。

  3. ポップアップが閉じられると、待機カーソルが表示され、数秒でエラー メッセージが表示され、アプリケーション (WPF) が終了します。

私はまだ運がないことを理解するのに何時間も費やしました。イベントビューアーから次の例外をコピーしました。

  • 同じアドレス帳が別のモジュールで使用されているため、アドレス帳モジュールには問題がないことがわかりました。

  • アドレス帳を開いて選択した名前を読み取るメソッドでは、キャッチブロックに到達しませんでした。

例外情報: System.AccessViolationException スタック: System.Windows の System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) の MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) で。 Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) の System.Windows.Window.ShowHelper(System.Object) の System.Windows.Window.Show() の System.Windows.Window.ShowDialog() の xxxxx。 Frw.Base.Client.UI.DialogService.ShowDialog(xxxxx.Frw.Base.Client.UI.BaseViewModel) at xxxxx.Frw.Base.Client.UI.DialogService.ShowDialog(xxxxx.Frw.Base.Client.UI.BaseViewModel) 、System.Windows.Controls.UserControl) xxxxx.Frw.Region.Reu.Client.UI.ViewModels.ReportHeaderViewModel で。MS で xxxxx.Frw.Base.Client.UI.Commands.RelayCommand.Execute(System.Object) で xxxxx.Frw.Region.Reu.Client.UI.ViewModels.ReportHeaderViewModel.b__1(System.Object) で ShowDistributionList()。 Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(System.Windows.Input.ICommandSource, Boolean) の System.Windows.Controls.Primitives.ButtonBase.OnClick() の System.Windows.Controls.Button.OnClick() の System.Windows.Controls .Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs) で System.Windows.UIElement.OnMouseLeftButtonUpThunk(System.Object, System.Windows.Input.MouseButtonEventArgs) で System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate) 、System.Object) で System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object) の System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs) の System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean) System.Windows.UIElement.ReRaiseEventAs (System.Windows.DependencyObject、System.Windows.RoutedEventArgs、System.Windows.RoutedEvent) で System.Windows.UIElement.OnMouseUpThunk (System.Object、System.Windows.Input.MouseButtonEventArgs) で.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate, System.Object) で System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object) で System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows) .RoutedEventArgs) の System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean) の System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs) の System.Windows.UIElement .RaiseTrustedEvent(System.Windows.RoutedEventArgs) で System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs, Boolean) で System.Windows.Input.InputManager.ProcessStagingArea() で System.Windows.Input.InputManager.ProcessInput(System .Windows.Input.InputEventArgs) で System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport) で System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr, System.Windows.Input.InputMode, Int32, System .Windows.Input.RawMouseActions、Int32、Int32、System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr, MS.Internal.Interop.WindowMessage, IntPtr, IntPtr, Boolean ByRef) で System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean) でSystem.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object、Int32) の MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object、System.Delegate、System.Object、Int32、System.Delegate) の System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows. Threading.DispatcherPriority、System.TimeSpan、System.Delegate、System.Object、System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.Dispatcher.PushFrameImpl(System. Windows.Threading.DispatcherFrame) の System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) の System.Windows.Application.RunDispatcher(System.Object) の System.Windows.Application.RunInternal(System.Windows) .Window) で System.Windows.Application.Run(System.Windows.Window) で xxxxx.Frw.Main.Client.UI.App.Main() でSystem.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) の PushFrameImpl(System.Windows.Threading.DispatcherFrame) System.Windows.Application.RunDispatcher(System.Object) の System.Windows.Application.RunInternal (System.Windows.Window) で System.Windows.Application.Run(System.Windows.Window) で xxxxx.Frw.Main.Client.UI.App.Main()System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) の PushFrameImpl(System.Windows.Threading.DispatcherFrame) System.Windows.Application.RunDispatcher(System.Object) の System.Windows.Application.RunInternal (System.Windows.Window) で System.Windows.Application.Run(System.Windows.Window) で xxxxx.Frw.Main.Client.UI.App.Main()

4

1 に答える 1

0

この問題の原因を突き止めることはできませんでしたが、アプリケーションのクラッシュを防ぐ解決策を見つけました。

未処理の例外は、最後に呼び出されたマネージ コード メソッドを

xxxxx.Frw.Base.Client.UI.DialogService.ShowDialog()

この属性を追加した後、メソッド装飾を使用して try catch を追加しただけで、HandleProcessCorruptedStateExceptionsMAPI 相互運用機能によってスローされた例外をキャッチし、アプリケーションのクラッシュの問題を処理することができました。

[HandleProcessCorruptedStateExceptions]
public void ShowDialog()
{
 try
  {
  }
 Catch(Exception ex)
  {
  }
}
于 2013-10-03T12:43:35.993 に答える