ああ!帰ってきたぞ!私の問題で他の人に迷惑をかけるのは嫌いですが、私はこれに3日間ほど取り組んできました.
チャット アプリケーションの例を使用して、それをゲームに組み込みました。クライアントとサーバーは適切に接続しますが... クライアントに問題があります。:/
public static void appendText(RichTextBox box, string line)
{
if (box == null || box.IsDisposed)
return;
//try
//{
box.AppendText(line + Environment.NewLine);
ScrollRichTextBox(box);
//}
//catch
//{
// Program.debug.print("Something went wrong.");
//}
}
AppendText 行は例外 (InvalidOperationException) をスローし続けます。try-catch をコメントアウトし、コンパイラが何が問題なのか、おそらくそれを修正する方法についてさらにアドバイスをくれることを期待しましたが、その助けを借りてもどこにも行きません。
例では、このエラーを発生させずにそのコードを実行できます。ここでどこを間違えたのかわかりません。
ああ、AppendText は次によって呼び出されます...
public static void GotMessage(object peer)
{
NetIncomingMessage im;
while ((im = s_client.ReadMessage()) != null)
{
// handle incoming message
switch (im.MessageType)
{
case NetIncomingMessageType.DebugMessage:
case NetIncomingMessageType.ErrorMessage:
case NetIncomingMessageType.WarningMessage:
case NetIncomingMessageType.VerboseDebugMessage:
string text = im.ReadString();
//TextControl.appendText(menuWindow.richTextBoxStatus, text);
Program.printStatus(text);
break;
case NetIncomingMessageType.StatusChanged:
NetConnectionStatus status = (NetConnectionStatus)im.ReadByte();
/*if (status == NetConnectionStatus.Connected)
s_form.EnableInput();
else
s_form.DisableInput();
*/
//if (status == NetConnectionStatus.Disconnected)
//s_form.button2.Text = "Connect";
string reason = im.ReadString();
Program.printStatus(status.ToString() + ": " + reason);
break;
case NetIncomingMessageType.Data:
// incoming packet from the server, handle data
int size = im.ReadInt32();
byte[] bData = im.ReadBytes(size);
string data = Encoding.Unicode.GetString(bData);
Program.debug.print(data);
Program.printToChat(data);
handleData(data);
break;
default:
Program.printStatus("Unhandled type: " + im.MessageType + " " + im.LengthBytes + " bytes");
break;
}
}
}
printToChat または printStatus が見つかる場所。これらのメソッドには、AppendText への呼び出しが含まれています。
エラーが最初に表示されたときに Lidgren Google グループに投稿しようとしましたが、彼らからの返信がありませんでした。ここにいる人々が私が探している情報を持っていることを願っています. :)
必要に応じて、より多くの情報とコードを提供できます (いつものように)。
(UI要素へのスレッドセーフな呼び出しを行う方法をGoogleで調べましたが、コードがわかりにくすぎました。最終的に解決策を実装したと思ったとき、まったく機能しませんでした..)