2017-07-25 11 views
0

編集:テキストブロックの値を別のクラスで定期的に生成されるランダム変数の値に更新します。WPFで変数の値にテキストブロックを更新します

私の実装は、アプリケーション(ボタン)の他の機能をブロックしています。なにか提案を?

public partial class MainWindow : Window 
{ 
    TaskViewModel viewModel = new TaskViewModel(); 

    public MainWindow() 
    { 
     this.DataContext = viewModel; 
     InitializeComponent(); 
     Server_V2.AsyncService.runMain(); 
     DisplayAV(); 
    } 

    //Display Availability 
    private async void DisplayAV() { 
     while (true) { 
      //availabilityField.Text = Server_V2.AV.ToString(); 
      viewModel.Availability = Server_V2.AV.ToString(); 
      await Task.Delay(500); 
     } 
    } 

    public class TaskViewModel : INotifyPropertyChanged 
    { 
     private string availabilty = "0"; 
     public string Availability 
     { 
      get { return availabilty; } 
      set { availabilty = value; OnStaticPropertyChanged();} 
     } 
     public event PropertyChangedEventHandler PropertyChanged; 
     public void OnStaticPropertyChanged([CallerMemberName] string PropertyName = null) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); 
     } 
    } 
+2

あなたは答えに(コード)を試してみました何を追加する必要があります。それでも実行されていません。努力を示さなければ、あなたはコミュニティからの助けを得られません。 – Ben

+0

あなたは何を試してみることができますか?あなたは他のどの実装も参考にしていますか?私にクラスと、どのように変数にアクセスするのかを教えてください。定期的に更新される予定なのでイベントを使用していますか?タイマーかもしれない? –

+0

'AV'がクラスServer_V2の静的プロパティである場合、この回答の指示に従ってください:https://stackoverflow.com/a/34763286/1136211 – Clemens

答えて

0

バックグラウンドワーカーを使用する必要があります。非同期コードはまだメインスレッド上で実行されます。

このよう

...

BackgroundWorker worker = new BackgroundWorker(); 
    public MainWindow() 
    { 
     this.DataContext = viewModel; 
     InitializeComponent(); 
     Server_V2.AsyncService.runMain(); 
     worker.DoWork += Worker_DoWork; 
     worker.RunWorkerAsync(); 
    } 

    private void Worker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     while (true) 
     { 
      //availabilityField.Text = Server_V2.AV.ToString(); 
      viewModel.Availability = Server_V2.AV.ToString(); 
      Thread.Sleep(500); 
     } 
    } 
+0

ありがとうございました!これは機能します。 UI要素とのすべてのやりとりにバックグラウンドワーカーを使用する必要があることは理解していますが、バックグラウンドワーカーとタスクの間で処理上の主な違いは何ですか? –

+0

この記事の記事https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index: "非同期および待機キーワードによって、追加のスレッドが作成されることはありません。非同期メソッドが独自のスレッドで実行されないため、マルチスレッドを必要としません。 Async/awaitはコードを作成する方法です。あなたの問題には、バックグラウンドワーカーとは別のスレッドが必要です。 – AQuirky

+0

ありがとうございました! –

関連する問題