2017-08-16 4 views
1

.NET SmtpClientクラスを使用してAppServerプロシージャから電子メールを送信しています。 https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient(v=vs.110).aspxOpenEdgeでマルチスレッド.NETオブジェクトを使用する方法

OpenEdgeの構文はすべて正しいです(クラスブラウザを使用して、コードを変換するのは簡単です)が、問題の行はここにあります:あなたがサポートされていない方法でマルチスレッドの.NETオブジェクトを使用しようとしている

mailClient:send(mailMessage). 

次のエラーが表示されたコードを実行

。メインスレッド以外のスレッドでABLを呼び出すことはできません。 (15740) ABLはシングルスレッドです。複数のスレッドを使用し、メインの処理スレッド以外のスレッドでABLにコールバックしようとする.NETオブジェクトを使用すると、このエラーが表示されます。

私が質問しているのは、マルチスレッド.NETオブジェクトをシングルスレッドなのでABLでどうやって使うのですか?

最初にWAIT-FORステートメントを使用してドキュメントを提案しましたが、結果は変わりませんでした。

+0

私は少し混乱しています。[SmtpClientのMSDNサイト](https://msdn.microsoft.com/en-us/library/x5x13z6h(v = vs.110).aspx)を見てください'send'メソッドが非同期ではないので、特別な' SmtpClient.SendAsync'メソッドがあります。これには、 'Async'という接頭辞を持つ他の多くのメソッドもあります。 – xander

答えて

1

簡単な答えはありません。メソッドのレスポンスが必要ない場合は、C#でラッパーメソッドを作成できます。 sendメソッドからの応答が必要な場合は、AppServer上で不運になります。これは、WinFormコントロールでのみ可能なスレッド同期が必要になるためです。

+0

ああ、私は参照してください。電子メールが送信され、エラーがスローされていないことを確認する応答が必要です。だから、このチェックはC#でラップする必要がありますか? –

+0

はい。 ABLは単にバックグラウンドスレッドでは動作しません –

関連する問題