このトピックを読んでいただきありがとうございます。C#(WPF)非同期スレッド、GUIへのインターフェイス
新しいWPFアプリケーション(C#でビルド)については、デザインに関する質問があります。 ここ数日、私はC#(.NET 4.5ベース)で非同期プログラミングについて多くのことを読んできました。
私たちがしたいことは:独立したバックグラウンドタスクを実行する新しい非同期スレッドを作成することです。このスレッドに利用可能なデータがある場合は、このデータを(パブリックインターフェイスによって)メインプログラムに送信します。したがって、スレッドはメインプログラムのデータを設定し、すぐに再びスレッドに戻ります。メインプログラムは、データが変更されたときにイベント(INotifyPropertyChanged)を発生させます。
この非同期スレッドを作成するにはどうすればよいでしょうか?または、少なくとも、この機能を設計するにはどうすればよいでしょうか?
現時点では、スレッドを作成するアプリケーションをビルドしました。 これは、現時点では非同期に動作しません。
public MainWindow()
{
InitializeComponent();
InitGuiInterface(this);
//Create thread
new OuterLabel_Thread(this);
}
そしてここで、以下のクラス "OuterLabel_Thread.cs":事前に
public class OuterLabel_Thread
{
private MainWindow context = null;
private bool exit = false;
private int count = 0;
public OuterLabel_Thread(MainWindow context)
{
this.context = context;
Console.WriteLine("Running sample thread");
Thread thread = new Thread(delegate()
{
Console.WriteLine("Sample thread started");
//start new task
//run();
Task.Factory.StartNew(run);
});
thread.Start();
}
public void Exit()
{
exit = true;
}
private void run()
{
while (!exit)
{
DateTime Time1 = DateTime.Now;
if (context != null && context.GuiInterface != null)
{
//context.GuiInterface.UpdateThreadCount(count, "label_code_content");
}
Console.WriteLine("Background thread count = " + count);
count++;
if (count > 1000)
{
exit = true;
}
//Console.WriteLine((DateTime.Now - Time1).TotalMilliseconds.ToString());
Thread.Sleep(10);
}
}
}
感謝を! 種類:
Rein。
なぜ非同期待ち時間を使用しないのですか? UIスレッドの管理とスレッド間エラーの回避が容易になります。そして、自分のスレッドを管理するのではなく、会話の問題を避けることができます。 – CodeMonkey
私はAsyncとawaitの使用経験はあまりありません。私はこれらの指示が何をするか知っています。 あなたの提案は依然としてスレッドの使い方に基づいていますか?その場合スレッドをどのように呼び出す必要がありますか? – Rein92
データを継続的に提供するサービスを作ることを望んでいるのですか、ボタンをクリックするだけで長時間実行するタスクですか? – CodeMonkey