C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ProcessDialogKeyを非同期処理する方法

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■93483 / inTopicNo.1)  ProcessDialogKeyを非同期処理する方法
  
□投稿者/ 大蛇 (1回)-(2019/12/14(Sat) 17:34:40)

分類:[.NET 全般] 

キーが押された時に行う処理を非同期で行いたいのですが、
そのために、ProcessDialogKeyでAwaitを使う必要があります。

Awaitを使うためには、Functionの前にAsyncを付ける必要があるのですが、

以下のようにAsyncを付けると

    '  Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
    Protected Overrides Async Function ProcessDialogKey(ByVal keyData As Keys) As Task(Of Boolean)


    End Function

以下のエラーが出てしまいます。

エラー	BC30437	戻り値の型が異なるため、'Protected Overrides Function ProcessDialogKey(keyData As Keys) As Task(Of Boolean)' 
で 'Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean' をオーバーライドすることはできません。	

一体どうすれば、
ProcessDialogKeyでAwaitを使うことができますか?


引用返信 編集キー/
■93484 / inTopicNo.2)  Re[1]: ProcessDialogKeyを非同期処理する方法
□投稿者/ Azulean (1115回)-(2019/12/14(Sat) 17:55:18)
2019/12/14(Sat) 18:36:51 編集(投稿者)

No93483 (大蛇 さん) に返信
> 一体どうすれば、
> ProcessDialogKeyでAwaitを使うことができますか?

使えません。
Async や Await を使うためには、「呼び出し元が戻り値を受け取らない(処理の完了を待たなくて良い)」か、「呼び出し元が Task 、または Task(Of T) を受け取る」かのどちらかを満たす必要があります。
ProcessDialogKey は Boolean の戻り値を即座に返す必要があるため、非同期で処理することはできません。

ちなみに、その非同期の処理は何をされるのでしょうか?
戻り値が変わらないなら、「Task を起動して Await は使わない」「BeginInvoke を使って後で処理する」といった対応になるかと思います。
引用返信 編集キー/
■93489 / inTopicNo.3)  Re[2]: ProcessDialogKeyを非同期処理する方法
□投稿者/ 大蛇 (2回)-(2019/12/15(Sun) 11:36:16)
ありがとうございます。

やはりそうでしたか。
Awaitは使いやすいように見えて非常に使いづらいですね。
従来通りに、taskとinvokeで対応したいと思います。

解決済み
引用返信 編集キー/
■93497 / inTopicNo.4)  Re[3]: ProcessDialogKeyを非同期処理する方法
□投稿者/ Azulean (1116回)-(2019/12/15(Sun) 18:53:41)
No93489 (大蛇 さん) に返信
> Awaitは使いやすいように見えて非常に使いづらいですね。

Async/Await は UI が固まらないように作り込んでいく際のハードルを下げる意図があるはずなので、イベントハンドラ起点で使うのが基本だと考えています。
今回の用に Override するケースでは使えません。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ