首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lidgren - InvalidOperationException未被处理

Lidgren - InvalidOperationException未被处理
EN

Stack Overflow用户
提问于 2014-02-06 08:25:19
回答 1查看 180关注 0票数 0

啊!我回来了伙计们!我讨厌用我的问题来打扰别人,但我已经花了3天的时间来解决这个问题。

使用聊天应用程序的例子,我把它塑造成我的游戏。客户端和服务器连接适当,但是..。我的当事人有麻烦了。:/

代码语言:javascript
复制
    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被.

代码语言:javascript
复制
    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 Group,但是我没有得到他们的回复,所以我希望这里的人能得到我想要的信息。:)

如果需要,我可以提供更多的信息和代码(一如既往,呵呵)。

(我在谷歌上做过如何对UI元素进行线程安全调用,但是代码太让人费解了。当我最终认为我实现了一个解决方案时,它根本不起作用。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 07:22:37

伙计,看着我,弄明白了。

我成功地将委托方法添加到我的表单中,以便可以跨线程访问它们。至少让我相信。现在,代码按预期的方式运行。

我需要添加代码来显示我做了什么。如果有人需要帮助解决这类问题我会的。我想我有能力解释它,但是MSDN能创造奇迹。

和往常一样,我只需问这个问题,并阅读评论,使之朝着正确的方向发展。

我真的需要停止问问题:/

我很抱歉。我对占用空间和浪费时间感到很难过。

编辑:我还编写了一种非常聪明的方法来规避使用委托的需要。然而,它需要使用一个计时器,或者一个循环,它也不时地重新绘制窗口表单(我使用了一个计时器)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21597528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档