3

こんにちは、私は C# アプリケーションを作成する初心者です。

基本的すぎる場合は申し訳ありません。Main xaml で実行されているスレッドがあり、いくつかの情報を照会してプロパティを更新します。

そのため、プロパティが "X" に設定されていることを検出したら、別の XAML ビューに切り替える必要があります。

私が直面している問題は、プロパティからスイッチを呼び出すと、アプリがクラッシュすることです。スレの関係だと思いますが..

Qn : プロパティ値の変更を検出したらすぐに、別の XAML ビューに切り替えるにはどうすればよいですか?

サンプルコード:

パブリック部分クラス MainWindow : ウィンドウ {

     ....
    private Thread t;
    public static enState dummy;

    public enState SetSTATE
    {
       get
       {
            return dummy;
       }
       set
       {
             dummy = value;
             if (dummy == A )
             {
                   var NEWVIEW = new  VIEW1();
                    contentGrid.Children.Add(NEWVIEW);      // - crashes in this block
              }
       }
     }

    public void startThread()
    {
      t = new Thread(getInfo);
      t.Isbackground = true;
      t.start();
    }

    public void getInfo()
    {
        while (true)
       {
            int x = somefunc();
           if (x == conditon)
           {
                SetSTATE = A;
           }
           Thread.Sleep(1000);
       }
    }
    MainWindow() { startThread(); }

}


パブリック部分クラス NEWVIEW: UserControl

4

1 に答える 1

1

バックグラウンド スレッドからコレクションを変更することはできません。変更を行うには、Dispatcher.BeginInvoke を明示的に使用する必要があります。

if (dummy == A )
{
    contentGrid.Dispatcher.BeginInvoke(new Action(() =>
    {
        var NEWVIEW = new  VIEW1();
        contentGrid.Children.Add(NEWVIEW);
    }));
}
于 2013-08-09T17:13:00.950 に答える