0

アプリケーションを閉じるときに問題が発生する WPF アプリケーションを開発しました。

Windows 2003 PC でのみ、アプリケーションを閉じるときに次の例外がスローされます。しかし、コールスタックを取得できないため、コードからスローされていないようです。

そのため、これ以上の詳細を投稿することはできません。

私がそれを掘り下げ始めることができる手がかりはありますか?

System.InvalidOperationException was unhandled
  Message=Handle is not initialized.
  Source=mscorlib
  StackTrace:
       at System.WeakReference.set_Target(Object value)
       at System.Windows.Threading.Dispatcher.FromThread(Thread thread)
       at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       at MS.Win32.UnsafeNativeMethods.IntDestroyWindow(HandleRef hWnd)
       at MS.Win32.HwndWrapper.DestroyWindow(Object args)
       at MS.Win32.HwndWrapper.Dispose(Boolean disposing, Boolean isHwndBeingDestroyed)
       at MS.Win32.HwndWrapper.Finalize()
  InnerException: 

アイデアをありがとう。

編集 どのコード行が失敗を引き起こすかを見つけました。しかし、どうすれば修正できますか?

次のコード行です。

        try
        {
            return DesignerProperties.GetIsInDesignMode(new DependencyObject());
        }
        catch (Exception)
        {
            return true;
        }

これを使用して、コードがデザイナーで実行されるかどうかを確認しています。しかし、例外をキャッチしましたが、このコードを閉じると失敗します。

デザインモードをチェックする他のアイデアはありますか? ご協力いただきありがとうございます。

4

1 に答える 1

0

私自身の質問に答えるために...

IsInDesignModeプロパティのバッキングフィールドを実装することで、この問題を解決できました。すべてのメソッド呼び出しでDesignModeをチェックした以前のソリューションではなく、ViewModelのコンストラクター内でバッキングフィールドが設定されるようになりました。

つまり、Disposeメソッド内でも、アプリケーションがDesignModeで実行されているかどうかを確認できます。

于 2012-08-10T06:44:51.393 に答える