Должен ли я очищать выполненные задачи в коллекции WithEvents в VBA при использовании COM-объекта (C# DLL)? Если да, то C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли я очищать выполненные задачи в коллекции WithEvents в VBA при использовании COM-объекта (C# DLL)? Если да, то

Сообщение Anonymous »

Я работаю над проектом VBA, в котором для обработки асинхронных задач используется класс WithEvents. Эти задачи управляются COM-объектом (библиотека C# DLL), который обеспечивает функциональность выполнения задач. Я поддерживаю коллекцию обработчиков, где каждый обработчик представляет экземпляр класса с WithEvents. Вот упрощенная версия кода:
Класс Task Runner:

Код: Выделить всё

Option Compare Database
Option Explicit

Public WithEvents taskRunner As ComEventTest.taskRunner

Private Sub taskRunner_OnTaskCompleted(ByVal result As String)
' Handle task completion
Debug.Print result
End Sub

Public Sub InitializeTaskRunner()
Set taskRunner = New ComEventTest.taskRunner
End Sub

Public Sub FireEvent(poraka As String)
taskRunner.RunTask poraka
End Sub
Модуль использования:

Код: Выделить всё

Option Compare Database
Option Explicit

Dim eventHandlers As Collection

Sub InitializeEventHandlers()
Set eventHandlers = New Collection
End Sub

Sub TestTaskRunner(Optional retr As String)
If eventHandlers Is Nothing Then
InitializeEventHandlers
End If

Dim newEventHandler As TaskRunnerEventHandler
Set newEventHandler = New TaskRunnerEventHandler

newEventHandler.InitializeTaskRunner
eventHandlers.Add newEventHandler

' Fire tasks
Dim i As Integer
For i = 1 To 3
newEventHandler.FireEvent "Task " & retr & "-" & i
Sleep 100 ' Simulate delay for async task running
Debug.Print "Task " & retr & "-" & i & " is running asynchronously!"
Next i
End Sub

Sub TestTaskRunner_MultCalls()
Dim i As Integer
For i = 1 To 3
Debug.Print "New CALL SUB fire " & i
TestTaskRunner CStr(i)
Sleep 500 ' Simulate delay between multiple calls
Next i
End Sub
Мой вопрос:
Должен ли я очистить завершенные обработчики из коллекции eventHandlers?< /strong>
  • Я использую COM-объект (DLL C#) для обработки асинхронных задач и заметил, что задачи могут завершиться асинхронно. Мне интересно, не приведет ли оставление этих обработчиков в коллекции со временем к проблемам с памятью.

Примечания:
< /em>
  • Каждый экземпляр обработчика оборачивает асинхронную задачу с помощью WithEvents.
  • Событие TaskRunner_OnTaskCompleted срабатывает после завершения задачи .
  • COM Объект представляет собой DLL C#, которая предоставляет объект TaskRunner и его события VBA.
  • Я мог бы реализовать флаг (например, isCompleted) в классе обработчика, но я не уверен, что это будет лучше практика динамического удаления завершенных обработчиков.
Каков рекомендуемый подход в этом сценарии? Что лучше — хранить все обработчики в коллекции или периодически их очищать? Стоит ли в этом случае полагаться на какие-то конкретные шаблоны взаимодействия с COM-объектами?

Подробнее здесь: https://stackoverflow.com/questions/792 ... en-using-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»