Код C#
ITaskRunnerEvents.cs
Код: Выделить всё
using System;
using System.Runtime.InteropServices;
namespace ComEventTest
{
[ComVisible(true)]
[Guid("c8614250-4291-4fb0-8b45-4aa305b0c595")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITaskRunnerEvents
{
void OnTaskCompleted(string result);
}
}
Код: Выделить всё
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace ComEventTest
{
[ComVisible(true)]
[Guid("ac9de195-73e8-44ae-8cf1-d8f110421923")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(ITaskRunnerEvents))]
public class TaskRunner
{
public delegate void TaskCompletedEventHandler(string result);
public event TaskCompletedEventHandler OnTaskCompleted;
public void RunTask(string input)
{
Task.Run(async () =>
{
await Task.Delay(5000); // Simulate work
OnTaskCompleted?.Invoke($"Task completed with input: {input}");
});
}
}
}
Модуль класса: TaskRunnerEventHandler
Код: Выделить всё
Option Compare Database
Option Explicit
Public WithEvents taskRunner As ComEventTest.taskRunner
Private Sub taskRunner_OnTaskCompleted(ByVal result As String)
MsgBox result
End Sub
Public Sub InitializeTaskRunner()
Set taskRunner = New ComEventTest.taskRunner
End Sub
Код: Выделить всё
Sub TestTaskRunner()
Set eventHandler = New TaskRunnerEventHandler
eventHandler.InitializeTaskRunner
eventHandler.taskRunner.RunTask "Test Input"
End Sub
- Когда я запускаю eventHandler.taskRunner .RunTask «Тестовый ввод» в подпрограмме TestTaskRunner, я получаю сообщение об ошибке:
Код: Выделить всё
Method or data member not found
< /ол>
Подробнее здесь: https://stackoverflow.com/questions/792 ... withevents