У меня есть приложение VBA, которое создает экземпляр COM-объекта, а затем постоянно опрашивает свойство объектов DataReady, чтобы узнать, есть ли новые данные. Когда новые данные доступны, он вставляет данные в электронную таблицу. Проблема в том, что этот макрос (подпрограмма vba) постоянно выполняется, и это замедляет работу Excel до обхода и делает компьютер несколько непригодным для использования во время выполнения процесса. Есть ли способ запустить этот процесс в отдельном потоке или сделать что-то вроде фонового рабочего .NET?
Мои две попытки состояли в том, чтобы использовать цикл while, подобный этому.
While(True)
If(myObject.DataReady)
Do some stuff here
End If
WEnd
а потом это
Sub GrabNewPoint()
If (myModule.NewDataReady_Receiver = True) Then
Do some stuff here...
End If
If (StopTest = False) Then
NextTime = Now() + TimeValue("00:00:20")
Application.OnTime NextTime, "GrabNewPoint"
End If
Вторая попытка определенно работает лучше, но все же значительно замедляет работу. Есть ли лучшее решение?
Мой COM-объект — это библиотека классов, которую я написал на C#. Я могу добавить события, которые срабатывают в библиотеке классов, когда данные готовы, но как мне прослушивать эти события в программе VBA?