Visual Basic에서 COM을 통해 C# 스레드를 호출하려고하면 오류가 발생합니다. 오류는 제네릭 형식이 포함되어 있지 않으므로 제네릭 형식을 마샬링 할 수 없다는 사실은 이상합니다.COM interop을 통한 스레드 호출
COM 인터페이스 :
[Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface comInterface
{
[DispId(1)]
Task firstTask();
}
구현 : VB6에서
[Guid("0D5E5234-B1C0-4CFA-9B35-21F091E2E8C4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("COMproject.implementClass")]
public class implementClass : comInterface{
public async Task firstTask(){
//doSomething
}
전화 : 난 그냥 C#에서 스레드를 호출하는 방법을 생성하는 방법을 노출시킬 수
Dim comObject As muhDLL.comInterface
Set comObject = New muhDLL.implementClass
comObject.firstTask
하지만 COM을 통해 경고를 받으면 코드는 일반적으로보기 흉하게 보입니다. COM을 통해 비동기 작업을 직접 호출 할 수있는 방법이 있습니까? COM이 작업을 지원하지 않는 것처럼 보이는 이유는 무엇입니까?
는
무엇이 오류입니까? – gilmishal
죄송합니다. 게시물을 편집했습니다. "일반 형식을 마샬링 할 수 없습니다."예외 – MrKey
그래, COM과 약간 녹슬었지만 COM이 Task를 반환 할 수 있을지 의심 스럽기 때문에 'Task'때문이라는 것이 논리적 인 것처럼 보입니다. 나는 당신이'async' 메소드를 생성함으로써 달성하고자하는 것을 확신하지 못한다. 왜냐하면 내가 아는 한 COM은 호출 할 때 스레드를 관리하기 때문에,'async await'의 이점을 사용하는 것이 의심 스럽다. 먼저 Task를 반환하지 않고 비동기를 사용하고 작동하는지 확인하지 않고 메서드를 만들려고합니다. – gilmishal