1

プログラムのインターフェースにいくつかの温度をリアルタイムで (たとえば、1 秒ごとに更新して) 表示したいと考えています。

これを行うには、メイン プログラムがブロックされないように、バックグラウンド ワーカーでコードを実行する必要があると思います。TextBlockここでの私の質問は、バックグラウンド ワーカーから aのテキストを設定できるかどうか、また可能であればその方法です。

これが基本的な考え方です:

backgroundworker
{
     while(true)
     {
           //reading and updating temperatures
           //.....
     }
}
4

1 に答える 1

5

BackgroundWorker has built in support for reporting the current progress of the work, which sounds like it's exactly what you're doing:

var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;

worker.DoWork += (s, args) =>
{
    while (true)
    {
        Thread.Sleep(1000);//placehodler for real work
        worker.ReportProgress(0, "Still working");
    }
};

worker.ProgressChanged += (s, args) =>
{
    textBox1.Text = args.UserState as string;
};

worker.RunWorkerAsync();

By leveraging the built in support you allow the background worker to handle marshaling to the UI thread. (It will ensure that all of the events besides DoWork run in the UI thread.)

This also has the advantage of separating the UI logic from the business logic, rather than embedding code for manipulating the UI all throughout code doing business work.

于 2013-06-14T17:30:23.030 に答える