none
別ウィンドウの表示について RRS feed

  • 質問

  • WPFアプリケーションから、処理状態を示すウィンドウを表示し、処理状況をそのウィンドウに随時反映しようとしています。

    (ファイル移動中・残りxx/xxxのようなもの)

    しかし、ウィンドウ内のコントロールの描画がされません。

     

      <StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" MaxWidth="200" MaxHeight="200">
        <Label HorizontalAlignment="Center">写真データベースを構築しています。</Label>
        <TextBlock VerticalAlignment="Center" Text="{Binding Path=sProgress,Mode=OneWay}"/>
       </StackPanel>
    
    

    上のようなウィンドウですが、ラベルの部分も描画されず、動的に動かすTextBlockの変化が終了した後に両方とも表示される感じです。

    ウィンドウ作成側のコードは以下のような感じです(動作確認用のコードです)

          DBProgressDialog temp = new DBProgressDialog();
          DBBuildDialogData dlgData = new DBBuildDialogData(100);
          temp.DataContext = dlgData;
          temp.Show();
    
          for (int i = 0; i < 10; i++)
          {
            dlgData.SetExecutedFileNum(i);
            System.Threading.Thread.Sleep(1000);
          }
    
    

    SetExecutedFileNum()はTextBlockにバインドされている文字列を更新するメソッドです。INotifyPropertyChangedのインタフェースも実装されています。

    つまらないミスをしている気がするのですが、よろしくお願いします。

     

    2010年12月12日 6:39

回答

  • メインスレッドで処理しててはいけません。描画もメインスレッドで行っているので、重い処理でスレッドを占有している間は描画もできません。別スレッドで処理するようにしてください。幸いなことに INotifyPropertyChanged による変更通知は自動的に Dispatcher で処理されるようになっているので、スレッド間呼び出しを気にする必要はありません。

    • 回答としてマーク sauberwind 2010年12月12日 11:23
    2010年12月12日 7:13
  • 進捗状況を表示するダイアログのサンプルがあったので紹介しておきます。

    http://www.hardcodet.net/2008/01/wpf-progress-dialog

    ソースコードをダウンロードできるので、参考にするといいかもしれません。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク sauberwind 2010年12月12日 11:23
    2010年12月12日 10:39

すべての返信

  • メインスレッドで処理しててはいけません。描画もメインスレッドで行っているので、重い処理でスレッドを占有している間は描画もできません。別スレッドで処理するようにしてください。幸いなことに INotifyPropertyChanged による変更通知は自動的に Dispatcher で処理されるようになっているので、スレッド間呼び出しを気にする必要はありません。

    • 回答としてマーク sauberwind 2010年12月12日 11:23
    2010年12月12日 7:13
  • 進捗状況を表示するダイアログのサンプルがあったので紹介しておきます。

    http://www.hardcodet.net/2008/01/wpf-progress-dialog

    ソースコードをダウンロードできるので、参考にするといいかもしれません。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク sauberwind 2010年12月12日 11:23
    2010年12月12日 10:39
  • Hongliangさん、なかむらさん、回答ありがとうございます。

    意外に手がかかりそうですね。ゆっくりサンプルを読んで勉強します。

    ありがとうございました。

    2010年12月12日 11:26