Argh! Я вернулся, ребята! Мне не нравится беспокоить других своими проблемами, но я работаю над этим, как через 3 дня.Lidgren - InvalidOperationException не был обработан
Используя пример приложения чата, я вложил его в свою игру. Клиент и сервер подключаются соответствующим образом, но ... У моего клиента возникают некоторые проблемы. :/
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). Я прокомментировал попытку, надеясь, что компилятор даст мне больше советов о том, что не так, и, может быть, как это исправить, но я не понимаю, с какой помощью.
В примерах я могу запустить этот код без получения этой ошибки. Я не знаю, где я здесь ошибся.
О, 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, когда впервые появилась ошибка, но я не получил от них ответа, поэтому я надеюсь, что люди могут получить информацию, которую я ищу. :)
Я могу предоставить дополнительную информацию и код при необходимости (как всегда, хех).
(я сделал Google, как сделать поточно-вызовы к элементам пользовательского интерфейса, но код был просто слишком запутанным, чтобы понять. Когда я наконец-то думал, что я реализовал решение, он просто отказался работать вообще ..)
Несмотря на то, что это неправильное исключение, но похоже, что вы получаете доступ к RichTextBox из другого потока. Попробуйте использовать 'Invoke', когда вы вызываете' box.AppendText() '. – Sinatr
Возможно, это не проблема с 'line'? Что делать, если он был пустым и/или пустым? попробуйте проверить 'if (string.IsNullOrEmpty (строка))) {return; } '. Просто чтобы быть уверенным, что нет проблемы с линией. – Iqbal
@Sinatr: Как именно я бы использовал метод Invoke? Я попытался сделать то, что показал пример MSDN в самом методе AppendText, и даже если он скомпилирован, ничего не произошло, когда оно было выполнено. Я удалил этот код, но я мог бы попытаться сделать это снова. Или, может быть, я должен попробовать это в свистке GotMessage? @ Iqbal: Линия не пуста. Метод debug.print - это всего лишь более короткий способ ввода System.Console.Write для меня. Каждый раз, когда пакет принимается, консоль может печатать строку, поэтому я знаю, что она не является нулевой. – Silver