C# 通过COM互操作调用线程

C# 通过COM互操作调用线程,c#,com,vb6,task,com-interop,C#,Com,Vb6,Task,Com Interop,每当我试图通过COM从VisualBasicClassic调用C#线程时,就会出现一个错误。错误表明无法封送泛型类型,这很奇怪,因为没有涉及泛型 COM接口: [Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface comInterface { [DispId(1)] Task firstTask(); }

每当我试图通过COM从VisualBasicClassic调用C#线程时,就会出现一个错误。错误表明无法封送泛型类型,这很奇怪,因为没有涉及泛型

COM接口:

[Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface comInterface
{
    [DispId(1)]
    Task firstTask();
}
实施:

[Guid("0D5E5234-B1C0-4CFA-9B35-21F091E2E8C4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("COMproject.implementClass")]
public class implementClass : comInterface{
public async Task firstTask(){
//doSomething
}
调用Vb6:

Dim comObject As muhDLL.comInterface
Set comObject = New muhDLL.implementClass
comObject.firstTask
我可以创建一个方法,在C#中调用线程,并通过COM公开该方法,但随后我确实收到了警告,代码总体上看起来很难看。有没有办法通过COM直接调用异步任务,为什么COM似乎不支持任务,或者我做的事情完全错了

[Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface comInterface
{
    [DispId(1)]
    Task firstTask();
}
上面的代码表示要将
任务
对象返回到COM代码。Task是一个具有属性、方法等的对象,这些属性、方法等表示有关返回void的函数的信息。要将任务返回到COM,它必须是COM可见的,并且它的所有成员也必须是COM可见的(我认为)。但我不知道是这样。通常,当您转到类的定义并展开类上方的attributes部分时,可以在类上看到ComVisible属性,但在这种情况下,我不这样做

我不是这方面的专家,但我也不相信ComInterop能与那样的异步函数一起工作。我还没有用COM做过很多多线程处理,所以我不能完全确定

我有一个应用程序,在其中我公开了一个返回void的函数,但它在其中调用了一个异步方法。然后,当异步工作完成时,我触发了一个我向COM公开的事件,COM代码将处理它


在创建事件并在COM代码中处理它们时

出现了什么错误?抱歉,我编辑了这篇文章。“泛型类型不能被封送”例外OK,我对COM有点生疏,但这似乎合乎逻辑,因为
任务
我怀疑COM能否返回任务。我不确定通过将方法创建为
async
,您试图实现什么,因为据我所知-COM在调用时管理您的线程,我怀疑它是否利用了
async wait
的好处。我会首先尝试在不返回Task或使用async并检查其是否有效的情况下创建该方法。我不太确定“我怀疑COM能否返回Task”是什么意思,因为据我所知Task没有返回语句。所有COM方法都返回HResult
HResult=Function(InParam1,InParam2,OutParam1)
VB将其更改为“OutParam=Function(InParam1,InParam2)”,返回值进入错误对象。整个程序集是COM可见的;因此,我不必在所有方法上显式声明此属性。谢谢你的建议,我一定会调查的。我目前正在使用bool函数调用异步函数,如果异步函数中发生错误,则返回false。