Невозможно получить значение local или аргумент 'hwndSource', так как он недоступен в указателе этой инструкции - PullRequest
0 голосов
/ 13 июня 2010

Я играю с Interops, и я подумал: «Эй, давайте закодируем что-нибудь, что обращается к буферу обмена ...», поэтому я погуглил и нашел несколько статей (да, я делаю это с WPF - .Net 3.5).

Однако следующий метод генерирует ошибку (как видно из заголовка) и генерирует переполнение стека.

private void Window_SourceInitialized(object sender, EventArgs e)
{
    // Hook to Clipboard
    base.OnSourceInitialized(e);
    HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
    if (hwndSource != null)
    {
        installedHandle = hwndSource.Handle;
        viewerHandle = SetClipboardViewer(installedHandle);
        hwndSource.AddHook(new HwndSourceHook(this.hwndSourceHook));
    }
    // End Hook to Clipboard 
} 

Я (действительно) понятия не имею, что там происходит.

Есть идеи?

1 Ответ

3 голосов
/ 14 июня 2010

Ваша проблема - звонок на base.OnSourceInitialized.Вы должны вызывать базовую реализацию, когда вы переопределяете метод, но здесь это не так: вы обрабатываете событие, а не переопределяете метод.

Поскольку событие SourceInitialized вызывается *Метод 1005 *, если вы вызываете OnSourceInitialized из события, оно вызовет событие снова.Таким образом, у вас бесконечная рекурсия, которая в конечном итоге вызывает переполнение стека.

Таким образом, у вас есть 2 варианта решения проблемы:

  • переопределить OnSourceInitialized вместо обработки SourceInitializedсобытие
  • удалить звонок на base.OnSourceInitialized
...