前提・実現したいこと
WPFを使っています。別のクラスから出力文字を指定し、TextBlockの文字の表示をリアルタイムに変更したいです。
以前、プログレスバーをリアルタイムに更新したいと相談させていただいたところ、
リアルタイムに更新するのであれば再描画をしたら良いとの回答をいただき、今回も再描画の処理を行っています。(Refresh部分)
Refreshの部分は以下のサイトを参考にしました。
http://geekswithblogs.net/NewThingsILearned/archive/2008/08/25/refresh--update-wpf-controls.aspx
MainWindow.xaml.csでのthis.Result();はリアルタイムに更新されますが、Namber.csは更新されず、フォームには開始→終了という表示になってしまいます。
コンソールで動作中も確認してみたのですが、あきらかにNamber.csの他の処理をしている途中でもフォームでは開始のままになっていました。
Namber.csで直接main.Refresh();としてもできませんでした。
フォームのTextBlockの文字を変更するときはMainでないとできないのでしょうか?
皆様ご教授お願いいたします。
該当のソースコード
文字の表示に関係ない処理の部分は省略していますが、以下のソースです。
MainWindow.xaml.cs
C#
1public partial class MainWindow:System.Windows.Window 2{ 3 public MainWindow() 4 { 5 InitializeComponent(); 6 } 7 private void btn_Click(object sender, RoutedEventArges e) 8 { 9 for(int i=0; i<5; i++) 10 { 11 this.Result("開始"); 12 Namber namber=new Namber(); 13 namber.Input(12); 14 this.Result("終了"); 15 } 16 } 17 18 public void Result(string result) 19 { 20 txResult.Text=result; 21 txResult.Refresh(); 22 } 23} 24 25public static class ExtensionMethods 26{ 27 private static System.Action EmptyDelegate=delegate(){}; 28 public static void Refresh(this UIElement uiElement) 29 { 30 uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyFelegate); 31 } 32} 33
Namber.cs
C#
1class Namber 2{ 3 public void Input(int num) 4 { 5 string Str=num.ToString()+"が入力された"; 6 MainWindow main=new MainWindow(); 7 main.Result(Str); 8 ==他の処理== 9 } 10}
補足情報(FW/ツールのバージョンなど)
VisualStudio 2015
.NetFreamwork 4
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/01 05:13 編集
2019/10/01 04:37
2019/10/01 04:58