无法获取本地或参数'hwndSource'的值,因为它在此指令指针处不可用

时间:2010-06-13 18:57:07

标签: c# .net interop clipboard

我正在和Interops一起玩,我想:“嘿,让我们编写一些可以访问剪贴板的东西......”所以我用Google搜索并发现了一些文章(是的,我用WPF做的 - .Net 3.5)。 / p>

但是,以下方法会生成错误(如标题中所示)并抛出stackoverflow。

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 个答案:

答案 0 :(得分:3)

您的问题是致电base.OnSourceInitialized。在覆盖方法时应该调用基本实现,但这不是这种情况:您正在处理事件,而不是覆盖方法。

由于SourceInitialized方法引发OnSourceInitialized事件,如果您从事件中调用OnSourceInitialized,则会再次引发事件。所以你有一个无限递归,最终导致堆栈溢出。

因此,您有2个选项可以解决问题:

  • 覆盖OnSourceInitialized而不是处理SourceInitialized事件
  • 移除对base.OnSourceInitialized
  • 的调用