クロスプロセスをドラッグ&ドロップのカスタムオブジェクトタイプをサポートC#

StackOverflow https://stackoverflow.com/questions/2106213

質問

この質問 は何に興味がある私にとっても必ずしもそうではありません。

しています当期純などをサポートで書かれたアプリケーショC#.してい ListView コントロールの表示配列の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を使用しています。だから、そう、あなたのクラスに[直列化]属性を適用し、必ずあなたのオブジェクトを解除することができます/シリアル化を適切に作成する必要があります。

他のヒント

[OK]を、これは、ショットである代わりに、セッション全体の配列を使用するのでは、このように個別にそれをやってみてください...

   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 }

フォートワース私は完全にセッションの一部を理解していないよう足で自分自身を撮影以外の撮影、それを試してみてください...

希望このことができます、 宜しくお願いします、 トムます。

あなたは(キャストが失敗した場合に例外がスローされることなく、「ヌル」を返します「と」)例外を回避します鋳造用「と」使用することができます - 私はこれは(それだけで意志あなたの問題を解決するとは思いません私はそれはおそらく、あなたのクラスの直列化を行う必要がありますです同意するとして、)実際の例外を避けます。ただ今のためにそれをテストするために、

- あなたはそれを動作させるために困難になるフィールドをコメントアウトして、仮説を検証することができます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top