我在玩Interops,我想:“嘿,让我们编写一些可以访问剪贴板的代码……”所以我在google上找到了一些文章(是的,我是用WPF-.net3.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 }
我(真的)不知道那里发生了什么事。
有什么想法吗?
你的问题是 base.OnSourceInitialized . 重写方法时应该调用基实现,但这里不是这样的:您是在处理事件,而不是重写方法。
base.OnSourceInitialized
自从 SourceInitialized OnSourceInitialized 方法,如果你调用 从事件开始,它将再次引发事件。所以有一个无限递归,最终导致堆栈溢出。
SourceInitialized
OnSourceInitialized
因此,您有两种解决问题的方法:
资源初始化
源已初始化