Я читаю память из другого запущенного процесса, исходный код которого у меня отсутствует, используя
[DllImport("kernel32.dll")]
public static extern int ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, uint size, out IntPtr lpNumberOfBytesRead);
и все работает отлично. Я получил нужное значение, но теперь я хочу реализовать что-то вроде INotifyPropertyChanged в моей программе, поэтому, когда значение в этом неуправляемом процессе изменяется, мой код регистрирует его и обновляет мою переменную X.
Пока у меня есть
private string x;
public string X { get { return x; } }
....
Threading.Timer timerX = new Timer(x => UpdateX(), null, 0, 500)
....
private void UpdateX()
{
//Read value from unmanaged process
OnPropertyChanged("X");
}
, который обновляет X, читая эту неуправляемую память процесса каждые 500 мс, но это похоже на взлом. Кроме того, память в неуправляемом процессе может изменяться несколько раз за 500 мсек или один раз в несколько минут, поэтому использование меньшего интервала кажется избыточным. Есть ли более элегантное решение. Спасибо.