如何在 OpenEdge 中使用多线程 .NET 对象

How to use multi-threaded .NET object in OpenEdge

我正在使用 .NET SmtpClient class 从 AppServer 程序发送电子邮件。我已经根据此处找到的语法实现了一些简单的代码来测试:https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient(v=vs.110).aspx

所有OpenEdge语法都是正确的(使用class浏览器,翻译代码很简单),但问题行在这里:

mailClient:send(mailMessage).

当运行代码显示以下错误:

您正在尝试以不受支持的方式使用多线程 .NET 对象。不能在主线程以外的线程上调用 ABL。 (15740) ABL 是单线程的。如果您使用采用多线程的 .NET 对象并尝试在主处理线程以外的线程上回调 ABL,您将看到此错误。

我的问题是如何在 ABL 中使用多线程 .NET 对象,因为它是单线程的。

最初文档建议使用 WAIT-FOR 语句,但这并没有改变结果。

没有简单的答案。如果不需要方法的响应,可以在 C# 中创建一个包装器方法。如果您需要来自 send 方法的响应,那么您在 AppServer 上会很不走运 - 因为这需要线程同步,只有 WinForm 控件才有可能。