1

コンテンツ コントロールのバインドされたプロパティを使用して、メイン ウィンドウのユーザー コントロールを変更しています。

XMAL:

<ContentControl Grid.Row="0" Content="{Binding MainContent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></ContentControl>

財産:

private UserControl _mainContent;
public UserControl MainContent
{
  get
  {
    return _mainContent;
  }
  set
  {
    _mainContent = value;
    OnPropertyChanged();
  }
}

コードビハインド:

MainContent = new TestUserControl();

プロパティが変更された場合:

    public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
  if (this.PropertyChanged != null)
  {
    this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
  }
}

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

私の問題は、1 つの特定のテスト マシン (他のマシンと同様であり、それについて独特または奇妙なものはありません。Windows 7、4GB RAM など) で、このメカニズムを使用してユーザー コントロールを変更すると、アプリケーションがハングすることです。

ログを見ると、Change コマンドが受信され、新しいユーザー コントロールがインスタンス化され、コンストラクターが実行されます。メイン コンテンツ プロパティが設定され、OnPropertyChanged イベントが発生します

そして何もありません。アプリケーションがハングし、Windows が応答していないことを示し、アプリを閉じます。

ユーザー コントロールの OnLoaded イベントは発生しません。

これは、特定のマシンでこの方法でユーザー コントロールをロードしたときに発生します。

アイデア、コメントは大歓迎です。これをデバッグする方法のアイデアは大歓迎です。

更新: これはテスト マシンであるため、頻繁に再起動することはありません。

マシンを再起動すると、問題はなくなりました。なぜ、またこのようなことが起こらないようにする方法を知りたいのです。

PS。ターゲット プラットフォームは x86 で、問題のマシンは x64 ですが、別のウィンドウ 7 x64 では問題はありませんでした。.net フレームワーク 4.0 を使用しています

4

1 に答える 1

1

以前にこれに遭遇しましたが、それは私が使用したことが原因でした:

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

プロパティはリリース モードで (そしておそらくコンパイル中に) インライン化されるため、プロパティ名はスタック検索によって正しく識別されませんでした...

于 2011-12-15T21:33:08.827 に答える