这个问题是接近我很感兴趣,但并不完全。

我有C#编写的一个.NET WinForms应用程序。我有显示C#对象的阵列的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]属性应用到你的类,并确保你的对象可以去/连载正常。

其他提示

确定这是一个镜头,而是采用会话的整个阵列,尝试单独做这样的...

   Session[] oDroppedSessions;
   try
   {
      if (e.Data.GetData("Fiddler.Session[]") != null){
          object[] objs = e.Data.GetData("Fiddler.Session[]");
          if (objs != null && objs.Length > 1){
             oDroppedSessions = new Session[objs.Length];
             int nIndex = 0;
             foreach(object obj in objs){
                if (obj is Session){
                  oDroppedSessions[nIndex] = (Session)obj;
                  nIndex++;
                }
             }
          }
      }
   }
   catch (Exception eX)
   {  // reaches here }

值得一试,比拍摄自己的脚,因为我不完全理解会议的部分外,试试吧...

希望这有助于 最好的祝福, 汤姆。

您可以使用“为”铸造这将避免异常(“为”将返回“空”,没有抛出,如果转换失败除外) - 但我不认为这将解决您的问题(它只是将避免实际的除外),因为我同意它很可能你就必须让你的类Serializable接口。您可以通过评论指出,将很难使其工作领域测试的假设 - 只是现在来测试它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top