0

プログラミングを始めたのはほんの数か月前なので、純粋な初心者ですが、高確率計算と表示/操作するUIを備えた数学アプリが必要だったので、検索してみたところ、C#.netが最善の方法でした...素晴らしいパワーです。 。

私がこれを行うことができれば、それは私が進歩するのに大いに役立ちます:

テキストボックス付きのWPFウィンドウ。テキストボックスには、計算が実行されるたびに数値が出力されますが、Uiは毎回応答する必要があります。

アプリは高速である必要があるため、最新のnet 4.5を使用して実行しようとしました(タイマーやバックグラウンドタスクではなく、最新の技術を使用してください)

動作しますが、Uiが動かなくなり、移動できません(テキストボックスへのアクセスが悪いため)

みんなが私を助けてくれるなら、それは素晴らしいことです。あなたの投稿でたくさんのことを学んだので、みんなに感謝します!

これが私の間違った初心者コードです

private Random rng;
public MainWindow()
{
    rng = new Random();
    InitializeComponent();
    Task.Run((Func<Task>) Calc);
}
private async Task Calc()
{
    while (true)
    {
        textBox1.Dispatcher.Invoke
             (DispatcherPriority.Normal
              , new Action(delegate() 
                 { 
                     textBox1.Text = rng.NextDouble().ToString(); 
                 }
                          )
              );
    }
}
4

1 に答える 1

4

確かに非UIスレッドでタイトループしていますが、UIスレッドで呼び出すデリゲートを無数に追加しています...そのため、UIは忙しすぎます。

現時点では、すべてrng.NextDouble()の作業は基本的に UI スレッドで行われています。バックグラウンド スレッドで計算することさえありません。

asyncまた、式のないメソッドがあることにも注意してください。これawaitにより、コンパイラの警告が発生するはずです。これに注意する必要があります。

あなたは「バックグラウンド タスク」を使用したくないと言っていますが、それはまさにを呼び出すことによって行っていることですTask.Run

今、私はあなたの実際のコードが実際に乱数を作成するだけではないと仮定しています. 実際の計算コードはどのようなもので、どのスレッドで発生しますか?

于 2012-06-20T12:52:43.640 に答える