Хорошо, у меня есть приложение, которое читает другие процессы памяти. Первоначально у меня было несколько потоков сканирования для различных областей, которые мне нужно было прочитать. Процессор был слишком интенсивным, поэтому я решил использовать шаблон наблюдателя. Все было хорошо, за исключением того, что у меня странное поведение.
Вот что происходит
У меня есть 2 радара (наложение и отображение). Оба имеют класс наблюдателя, который подключается к сканеру памяти и уведомляется о новом списке мобов.
поэтому я открываю радар 1 (сопоставленный), он прикрепляет наблюдателя к сканеру и ждет уведомлений об обновлении списка мобов
Открытый радар 2 (наложение). происходит то же самое, и прикрепляется другой наблюдатель.
пока все хорошо
Теперь в списке мобов есть свойства, одним из которых является IsFilteredOut. Это свойство устанавливается в коде радара после получения списка.
Теперь странное поведение состоит в том, что независимо от того, что я делаю, второй открываемый радар изменяет все свойства мобов в списке обоих радаров. Как будто я передаю список по ссылке, но это не так. Я на самом деле создаю новый экземпляр класса moblist каждый раз, когда прохожу список.
Вот код уведомления. Как вы можете видеть, я создаю новый экземпляр класса moblist каждый проход.
Private Sub NotifyMobListUpdated(ByVal Mobs As List(Of MobData))
If Mobs IsNot Nothing Then
For Each w As Watcher In _watchers
If w.Type And WatcherTypes.MobList = WatcherTypes.MobList OrElse w.Type And WatcherTypes.All = WatcherTypes.All Then
w.MobListUpdated(New MobList(Mobs))
End If
Next
End If
End Sub
Это то место, где оно обрабатывается в классе Watcher
''' <summary>
''' IWatcher MoblistUpdated Implementation
''' </summary>
''' <param name="Mobs">The Updated mob list</param>
''' <remarks></remarks>
Public Sub MobListUpdated(ByVal Mobs As MobList) Implements IWatcher.MobListUpdated
Try
PostNewMobList(Mobs)
Catch ex As Exception
End Try
End Sub
Public Sub PostNewMobList(ByVal Mobs As MobList)
_sync.Post(New SendOrPostCallback(AddressOf OnNewMobList), Mobs)
End Sub
Private Sub OnNewMobList(ByVal state As Object)
Dim mobs As MobList = TryCast(state, MobList)
Try
If mobs IsNot Nothing Then
RaiseEvent NewMobList(mobs)
End If
Catch ex As Exception
End Try
End Sub
Эта ошибка сводит меня с ума, и любая помощь будет принята с благодарностью.
Спасибо