1

.NET Remoting テクノロジが必須の分散倉庫番ゲームを実行しています。

サーバー コンポーネントでゲームのロジックをセットアップし、クライアント側でウィンドウ表示とキーボード コントロールをセットアップしました。クライアント コンポーネントが壁、床などを表示するゲームの画像でウィンドウ フォームを埋める必要がある時点で、未処理の例外が発生します。

未処理の例外: リモート通信は、「System.Drawing.Image」タイプ内に「nativeImage」フィールドを見つけることができませんでした。

Google で検索したところ、これはSystem.Drawingシリアル化を意図していない古い問題であるため、回避策が必要であることがわかりました。

私は C# (および一般的なプログラミング) にはあまり興味がないので、助けを求めます。

PictureBox.Imageソフトウェア コンポーネント間でオブジェクトを送信する方法は?

私のすべてのコードには[Serializable]MarshalByRefObjectタグがあります。

例は大歓迎です!

前もって感謝します。

4

1 に答える 1

1

After some research, i finally got the solution. All to do is to convert all Image objects into Strings, so it can be serializable.

At the server side:

public Bitmap img;

public String ImageToString(Bitmap img)
{
    byte[] byteArray = new byte[0];
    using (MemoryStream stream = new MemoryStream())
    {
        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
        stream.Close();
        byteArray = stream.ToArray();
    }
    return Convert.ToBase64String(byteArray);
}

At the client side:

public Bitmap img;

public Bitmap StringToImage(string imageString)
{
    if (imageString == null) throw new ArgumentNullException("imageString");
    byte[] array = Convert.FromBase64String(imageString);
    Bitmap image = (Bitmap)Bitmap.FromStream(new MemoryStream(array));
    return image;
}
于 2014-02-21T13:05:36.277 に答える