我正在和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
}
我(真的)不知道那里发生了什么。
任何想法?
答案 0 :(得分:3)
您的问题是致电base.OnSourceInitialized
。在覆盖方法时应该调用基本实现,但这不是这种情况:您正在处理事件,而不是覆盖方法。
由于SourceInitialized
方法引发OnSourceInitialized
事件,如果您从事件中调用OnSourceInitialized
,则会再次引发事件。所以你有一个无限递归,最终导致堆栈溢出。
因此,您有2个选项可以解决问题:
OnSourceInitialized
而不是处理SourceInitialized
事件base.OnSourceInitialized