gpt4 book ai didi

c# - WinForms C#中自定义对象类型的跨进程拖放

转载 作者:太空狗 更新时间:2023-10-29 20:35:33 26 4
gpt4 key购买 nike

This question接近我感兴趣的内容,但又不完全是。

我有一个用 C# 编写的 .NET WinForms 应用程序。我有一个显示 C# 对象数组的 ListView 控件。我已将其连接起来,以便您可以将这些 ListView 项拖放到同一应用程序中的不同形式,并将对象数组(类型 Session)正确传递给该对象的放置处理程序其他形式。

但是,我现在想要支持跨进程拖/放,以便运行我的应用程序的多个实例。这似乎它将起作用(例如GetDataPresent 成功),但最终在我实际尝试检索数据时抛出异常——无法转换object[] Session[]

if (e.Data.GetDataPresent("Fiddler.Session[]"))
{
Session[] oDroppedSessions;
try
{
oDroppedSessions = (Session[])e.Data.GetData("Fiddler.Session[]");
}
catch (Exception eX)
{ // reaches here
}
}

任何人都知道我是否必须为我的对象实现ISerializable 才能完成这项工作?通常,我会简单地尝试一下,但是为这个类实现 ISerializable 将是非常重要的,我担心这样做可能会产生奇怪的副作用。


更新:实现ISerializable 没有帮助——永远不会调用该方法。同样,为类添加 Serializable 属性也没有任何影响。还有其他想法吗?

最佳答案

您正在跨越进程边界,对象引用在另一个进程中无效。 DataObject类支持序列化对象让他们过墙,它使用了BinaryFormatter。所以,是的,您需要将 [Serializable] 属性应用于您的类,并确保您的对象可以正确反/序列化。

关于c# - WinForms C#中自定义对象类型的跨进程拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com