【问题标题】:Lose data serialization when I send a data into Windows clipboard当我将数据发送到 Windows 剪贴板时丢失数据序列化
【发布时间】:2023-03-13 14:48:01
【问题描述】:

我的 WPF 桌面应用程序中的 Windows 剪贴板存在一些问题。 我尝试检索剪贴板内容,做一些事情(不写这个内容,只读),然后将内容重新发送到剪贴板。它运行,但重新发送内容后,如果我检索剪贴板内容并尝试再次阅读,我有一个 OutOfMemory 异常。

经过搜索,我找到了这个链接:http://www.grumpydev.com/2009/09/05/system-outofmemoryexception-gotcha-using-clipboard-getdata-in-wpf/

这可能是因为序列化问题,我认为我的数据丢失了他的序列化属性,或者当我将它发送到剪贴板时。

这是我的代码:

var data = System.Windows.Clipboard.GetDataObject();
// Read "data"
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetDataObject(data, true);

var dataTwo = System.Windows.Clipboard.GetDataObject();
// Read "dataTwo" ==> OutOfMemoryException

请注意,数据没有我项目的类型,它可以是一切(photoshop、excel、图片、文本、二进制...)

有人有办法纠正这个问题吗?

谢谢你提前

【问题讨论】:

    标签: c# serialization clipboard


    【解决方案1】:

    根据您提到的链接和其中的结论,看起来data 变量类型必须标记为[Serrializable]

    由于您需要它几乎是“一切”,您可以尝试使用接口ISerializable

    class Foo
    {
        private ISerrialisable data;
        ...
    }
    

    只要对象是可序列化的,您就应该能够将它与剪贴板一起使用。

    【讨论】:

    • 您好,感谢您的回答。我已经尝试过您所说的,但很奇怪,我有和 MDA Excpetion,基于此线程的代码:stackoverflow.com/questions/1213074/… 也许我忘记了什么?
    • 有人有想法吗?我被屏蔽了
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2011-03-18
    • 2014-12-06
    • 2010-09-24
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多