2

私は WPF アプリケーションを持っており、タスクを実行するために個々のスレッドを実行しています。現在のスレッドを次のようにスリープ状態にしたいと考えています。

Thread.CurrentThread.Sleep(10000)

Java では見られますが、C# では見られません。UI スレッドが 1 つしかないことはわかっているので、Thread.Sleep(10000) を使用すると UI スレッドがブロックされます。私は非同期を使用しており、.NET 4.5 から待機しています。

var words = await Task.Factory.StartNew(() => { StringMgr.TextToUniqueWords(File.ReadAllText(filename));

// UI がフリーズせずに、このスレッドを 10 秒間スリープできるようにしたい

});

では、WPF アプリケーションで UI スレッドをフリーズせずに子スレッドをスリープ状態にするにはどうすればよいでしょうか?

ありがとう!

4

2 に答える 2

5

すでに を使用asyncしているので、非同期の方法で実行できます。

var words = await Task.Run(async () =>
{
  StringMgr.TextToUniqueWords(File.ReadAllText(filename));
  await Task.Delay(TimeSpan.FromSeconds(10));
});

ただし、解決しようとしている実際の問題に対して、睡眠は間違った解決策であると思われます。実際の問題について別の質問を投稿したい場合は、より良い解決策が見つかるかもしれません。

于 2013-03-31T00:34:13.690 に答える
3

試してみましたか?Sleeping thread inside a Task won't freeze your GUIただし、現在のバックグラウンド スレッドがスリープ モードになり、UI は常に応答性を維持します。

        Task.Factory.StartNew(() =>
            {
                Thread.Sleep(5000000); // this line won't make UI freeze.
            });
        Thread.Sleep(5000000); // But this will certainly do.
于 2013-03-30T19:51:32.870 に答える