мне удалось получить словарь, который может хранить события:Сохранение событий в словаре, а затем поднимая их
'Terrible .NET events... where's sender and e?!
Public Event ItHappened()
Public Event ItAlmostHappened()
Private mapping As New Dictionary(Of String, System.Delegate) From _
{{"happened", ItHappenedEvent},
{"almostHappened", ItAlmostHappenedEvent}}
Отлично! Теперь, когда у меня есть этот словарь, я могу преобразовать строковый поток событий в . Я-реальный мальчик событий! Я даже придумал, как назвать их:
mapping(key).DynamicInvoke()
Но увы mapping(key)
является пустым ... даже после добавления обработчика для события. Если я обновляю значение в словаре до mapping("happened") = ItHappenedEvent
после добавления обработчика, тогда все будет хорошо. Есть ли способ сделать что-то подобное программно? Или иначе сохранить строку -> карту событий для перевода ввода строки в события во время выполнения?
Edit:
Реальный код по запросу. Это часть механизма, позволяющего нам передавать команды на WinService, запущенные на сервере. Подход «сделай проще всего, что ты можешь сделать» заставляет нас использовать файлы, размещенные на сервере, в качестве сигнального механизма.
Public Class CommandChecker
Implements IDisposable
Public Event RefreshPlannableStations()
Private _knownCommmands As New Dictionary(Of String, System.Delegate) From _
{{"refreshStations", RefreshPlannableStationsEvent}}
Private WithEvents _fsw As FileSystemWatcher
Public Sub New(ByVal path As String)
Me._fsw = New FileSystemWatcher(path, "*.command")
End Sub
Private Sub fsw_Created(ByVal sender As Object,
ByVal e As FileSystemEventArgs) Handles _fsw.Created
If Me._knownCommmands.ContainsKey(key) Then
Me._knownCommmands(key).DynamicInvoke()
'Delete file to acknowledge command
EndIf
End Sub
'Snipped IDisposable stuff
End Class
В другом месте мы создаем этот класс, а затем подписываемся на его событие.
Me._checker = New CommandChecker()
AddHandler Me._checker.RefreshPlannableStations, AddressOf OnRefreshStations
Это упражнение в любопытства, или есть проблема, которую вы пытаетесь решить? – Adrian
Просьба представить реальный код, который мы можем воспроизвести. – Neolisk
Используйте [Пользовательское ключевое слово] (http://msdn.microsoft.com/en-us/library/wf33s4w7%28v=vs.80%29.aspx), чтобы определить настраиваемое событие. Используйте аксессоры для обновления каталога. –