Отладка приложения Windows Form - PullRequest
2 голосов
/ 18 марта 2012

Я создаю программу чата, которая сохраняет сообщения в файлах, таких как pub0.zzc, все компьютеры, которые ее используют, будут подключены к жесткому диску, на котором находятся эти файлы, так что все в порядке.Метод data.Chat.Read (тип MessageTypes, строка Channel) выполняет бесконечные циклы в операторе try catch, пока не вернет сообщения.Я использовал это раньше и работает отлично.Но моим кодом было сложно управлять, поэтому вместо того, чтобы просто помещать текстовые поля в окно и каждый раз использовать код, я создал пользовательский элемент управления (MessageViewer).Он работает нормально, еще раз, когда я запускаю его, НО он замораживает VS всякий раз, когда я пытаюсь использовать конструктор в окне, в котором находится элемент управления.проблема не в окне, потому что когда я удаляю элемент управления, это нормально.Я думаю, что возможные ошибки в RefreshMessages () и Refresher_Tick (...)

Refresher.Stop () и .Start () также не так, работали нормально до

, так что здесьэто код:

    private void Refresher_Tick(object sender, EventArgs e)
    {
        Refresher.Stop();
        int RefreshRate = 4;
        bool Live = true;
        if (RefreshRateChoice == "Manual")
        {
            Live = false;
            RefreshRate = 1;
        }
        else if (RefreshRateChoice == "4 ( Default )")
        {
            Live = true;
            RefreshRate = 4;
        }
        else
        {
            Live = true;
            RefreshRate = Convert.ToInt32(RefreshRateChoice);
        }
        if (data.Chat.Read(MessageType, ChannelChoice) != ContentPresenter.Text && Live)
        {
            RefreshMessages();
        }
        Refresher.Interval = RefreshRate;
        Refresher.Start();
    }




    public void RefreshMessages() {
            if (data.Chat.Read(MessageType, ChannelChoice) != ContentPresenter.Text)
            {
                ContentPresenter.Text = data.Chat.Read(MessageType, ChannelChoice);
            }
    }

и если вам это нужно:

        public static string Read(MessageTypes Type, string Channel)
        {
            string Loc;
            if (Type == MessageTypes.Public && (Channel == "1" || Channel == "2"))
            {
                return "Can not view this channel, only post to it.";
            }
            if (Type == MessageTypes.Public)
            {
                Loc = data.AssetsFolder + "\\pub" + Channel + ".zzc";
            }
            else if (Type == MessageTypes.Private)
            {
                Loc = data.AssetsFolder + "\\" + Channel + ".zzpc";
            }
            else if (Type == MessageTypes.Game)
            {
                Loc = data.AssetsFolder;
            }
            else
            {
                Loc = data.AssetsFolder;
            }
            while (true)
            {
                try
                {
                    String MessageList = "";
                    StreamReader MessageReader = new StreamReader(Loc);
                    string EncMessages = MessageReader.ReadToEnd();
                    MessageReader.Dispose();
                    List<string> EncMsgList = EncMessages.Split(';').ToList();
                    for (int i = 1; i < EncMsgList.Count; i++)
                    {
                        MessageList += data.Encodings.Decrypt(EncMsgList[i], Palettes.Message) + "\n";
                    }
                    return MessageList;
                }
                catch
                {
                    // Do nothing
                }
            }
        }

1 Ответ

1 голос
/ 18 марта 2012

Вы говорите, что оно "зависает".

В вашем методе Read у вас есть цикл while (true) со встроенным блоком try ... catch, но catch никогда не возвращает вас из этого метода. Если вы продолжаете выдавать одно и то же исключение, вы будете продолжать повторять цикл снова и снова, что может быть в том месте, где вы зависаете.

По крайней мере, чтобы доказать, что дело обстоит именно так, поместите возврат в улов или какой-нибудь диагностический код, чтобы указать, так ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...