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

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

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

Re[1]: VB.Net 非同期処理について


(過去ログ 170 を表示中)

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

■98151 / inTopicNo.1)  VB.Net 非同期処理について
  
□投稿者/ RS (28回)-(2021/09/29(Wed) 16:29:39)

分類:[.NET 全般] 

VB.Netでの非同期処理について質問です。

戻り値と引数のある関数を非同期で動かしたいのですが、
この処理内で、ダイアログを表示しています。

Thread.SetApartmentStateを設定すればエラーが回避できるとのことで
調べていたのですが、Taskには設定できないようで、困っています。
戻り値と引数のある関数を非同期で、かつThread.SetApartmentStateを設定して
動かすことはできるのでしょうか?

フレームワークは4.5.2です。

ご存知の方がいらっしゃいましたら、ご教授お願いいたします。
引用返信 編集キー/
■98152 / inTopicNo.2)  Re[1]: VB.Net 非同期処理について
□投稿者/ WebSurfer (2353回)-(2021/09/29(Wed) 16:58:02)
No98151 (RS さん) に返信

何を作っているのですか? WinForms? WPF?

> この処理内で、ダイアログを表示しています。

ダイアログって何ですか?

簡単なサンプルで良いので作ってアップして何が問題か
説明してください。
引用返信 編集キー/
■98153 / inTopicNo.3)  Re[2]: VB.Net 非同期処理について
□投稿者/ RS (29回)-(2021/09/29(Wed) 17:14:48)
No98152 (WebSurfer さん) に返信
> ■No98151 (RS さん) に返信
>
> 何を作っているのですか? WinForms? WPF?
>
>>この処理内で、ダイアログを表示しています。
>
> ダイアログって何ですか?
>
> 簡単なサンプルで良いので作ってアップして何が問題か
> 説明してください。

作っているのはWinFormsです。
ファイルの保存ダイアログを表示しています。

以下、サンプルとなります。

Dim result As Boolean = Await Task.Run(Function() CreateExcel(String型変数))
If result = False Then
Throw New Exception
End If

非同期で動かしたいのはCreateExcelに記載されています。
CreateExcelは、String型の引数を受け取って、処理結果をBooleanで返しています。
CreateExcelの中で、ファイルの保存ダイアログを表示しています。

上記サンプルのまま実行すると、以下のエラーになります。

OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。Main 関数に STAThreadAttribute が設定されていることを確認してください。 この例外はデバッガーがプロセスにアタッチされている場合にのみ発生します。

エラー内容を調べていたところ、SetApartmentStateの設定が必要とのことでしたので
質問した次第です。

よろしくお願いします。


引用返信 編集キー/
■98154 / inTopicNo.4)  Re[1]: VB.Net 非同期処理について
□投稿者/ Azulean (1204回)-(2021/09/29(Wed) 20:11:35)
No98151 (RS さん) に返信
> 戻り値と引数のある関数を非同期で動かしたいのですが、
> この処理内で、ダイアログを表示しています。
>
> Thread.SetApartmentStateを設定すればエラーが回避できるとのことで
> 調べていたのですが、Taskには設定できないようで、困っています。
> 戻り値と引数のある関数を非同期で、かつThread.SetApartmentStateを設定して
> 動かすことはできるのでしょうか?

できません。
Task の利用は諦めて、自前で STA スレッドを作って実行するなら可能かもしれませんが、やめておいた方が良い気もします。
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -