私はWinforms exeを持っており、メニューからは、タスクとして低速実行プロセスを起動します。データを取得してからダイアログを表示するまでには約30秒かかります。通常、それはもはや返されません。私は例外をキャッチし、ログに何も表示されないので、それが正常に実行されていることがわかります。フォームは決して表示されず、CPU時間がかかっていないようです。しかし、私はデバッガでそれを実行し、コードをステップ実行し、正常に動作します。時々、より高速のPCで動作するように見えます。何が起こっている?Winforms async/awaitタスクが返されないようにする
private async void inPlayRecordToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!GetClient()) return;
{
await Task.Run(() =>
{
LaunchForm();
});
}
}
private async void LaunchForm()
{
try
{
{
var inPlayView = new InPlayView();
await inPlayView.GetData();
inPlayView.ShowDialog();
}
}
catch (Exception ex)
{
Logger.LogMessage(ex.ToString());
}
}
非同期メソッドは通常、「タスク」を返します。詳細については、[この回答](https://stackoverflow.com/questions/12144077/async-await-when-to-return-a-task-vs-void)を参照してください。 – Amy
Task.RunはUIオブジェクトにアクセスしたり、ダイアログを作成したりしてはいけないバックグランドスレッド上でコードを実行しようとしています。 – RogerN
ブレークポイントの設定を試しましたか?エラーメッセージが表示されますか? (私は 'InvalidOperationException'はスレッド間の問題のために期待しています。)' GetData() 'のコードを表示できますか? – Cameron