ShadowSMS Ответов: 1

Как мне избавиться от всех этих всплывающих окон исключений?


Я помещаю список журналов событий в dataGridView из windows froms программа работает нормально и более или менее делает то, что ей нужно, но пока она помещает ее в dataGridView и пока я прокручиваю события в dataGridView это выбрасывает тонну ошибок.

Видео выпуска: https://youtu.be/Ixl7AatUiW0

Я не знаю, откуда они берутся и с чего начать их чинить.
Вы можете как бы прокручивать события, но он выдает эти ошибки и продолжает работать.

----------------------------------------------------------------------------------------------------------

public static class EventLogClassContainer
    {
        public static string EvlLocation { get; set; } = "";
        public static string EvlName { get; set; } = "Application";
        public static string evlLocationManual = "%Test.evt%";
        public static List<EventLogEntry> _LogEntries { get; private set; }

        public static void ReadEventLog()
        {
            EventLog evlLog = new EventLog(EvlName, ".");
            EventLogEntryCollection eventLogEntries = evlLog.Entries;
            int eventLogEntryCount = eventLogEntries.Count;
            foreach (EventLogEntry entry in evlLog.Entries)
            {
                //entry.Message
                _LogEntries = eventLogEntries.Cast<EventLogEntry>().ToList();
            }
        }

        public static void SetEvlName(string evlLocation)
        {
            Parser.FileNameFinder(evlLocation, 3);
        }

        public static void RELSystemTest()
        {
            EventLog evlLog = new EventLog("Application", ".");
            EventLogEntryCollection eventLogEntries = evlLog.Entries;
            int eventLogEntryCount = eventLogEntries.Count;
            _LogEntries = eventLogEntries.Cast<EventLogEntry>().ToList();
        }

        public static void ParseTest()
        {
            evlLocationManual = "K:\\Event Log\\Test\\Test.evt";
            ReadEventLog();
        }

        public static void setLogLocation(string input)
        {
            EvlLocation = input;
        }
    }

----------------------------------------------------------------------------------------------------------

// Open the log file
        private void OpenFile()
        {
            // Show file open dialog
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                // Create a dataset for binding the data to the grid.
                ds = new DataSet("EventLog Entries");
                ds.Tables.Add("Events");
                ds.Tables["Events"].Columns.Add("ComputerName");
                ds.Tables["Events"].Columns.Add("EventId");
                ds.Tables["Events"].Columns.Add("EventType");
                ds.Tables["Events"].Columns.Add("SourceName");
                ds.Tables["Events"].Columns.Add("Message");
                // Start the processing as a background process
                EventLogClassContainer.EvlLocation = openFile.FileName;
                worker.RunWorkerAsync(openFile.FileName);
            }
        }

        // Bind the dataset to the grid.
        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            EventLogClassContainer.RELSystemTest();
            bs = new BindingSource(ds, "Events");
            Foo foo1 = new Foo("TEST PC");
            ComputerName.Add(foo1);

            bs.DataSource = EventLogClassContainer._LogEntries;
            //Bind fooList to the dataGridView
            dataGridView1.DataSource = bs;

            this.Invoke(pbHandler, new object[] { 100, 100 });
        }

----------------------------------------------------------------------------------------------------------

Исключения ниже:

Следующее исключение в datagridview:

Система.ArgumentException: параметр недопустим. в системе.Рисование.Изображение.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
около
Система.Рисование.ImageConverter.Командлет convertfrom(ITypeDescriptionContext контексте, свойство CultureInfo культуры, значение объекта)
около
Система.Окна.Формы.Форматер.FormatObjectInternal(значение объекта, тип targetType. TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue) в системе.Окна.Формы.Форматер.FormatObject(объект, значение, формат тип, класса typeconverter sourceConverter, класса typeconverter targetConverter, строке строку формата, объекта iformatprovider formatInfo, объект formattedNullValue, объект dataSourceNullValue)
около
Система.Окна.Формы.Объект datagridviewcell.GetFormattedValue(значение объекта, тип int32 значение параметра rowindex, DataGridViewCellStyle &амп; cellStyle, класса typeconverter valueTypeConverter, класса typeconverter formattedValueTypeConverter, DataGridViewDataErrorContexts контексте)

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


Следующее исключение в datagridview:

Система.ArgumentException: значение '0' не является допустимым значением для перечисления 'EventLogEntryType'.
около
Система.ComponentModel.EnumConverter.ConvertTo (itypedescriptorcontext context, CultureInfo culture, Object value, Type destinationType)
около
Система.Окна.Формы.Форматер.FormatObjectInternal(значение объекта, тип targetType. TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue) в системе.Окна.Формы.Форматер.FormatObject(объект, значение, формат тип, класса typeconverter sourceConverter, класса typeconverter targetConverter, строке строку формата, объекта iformatprovider formatInfo, объект formattedNullValue, объект dataSourceNullValue)
около
Система.Окна.Формы.Объект datagridviewcell.GetFormattedValue(значение объекта, тип int32 значение параметра rowindex, DataGridViewCellStyle &амп; cellStyle, класса typeconverter valueTypeConverter, класса typeconverter formattedValueTypeConverter, DataGridViewDataErrorContexts контексте)

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

Что я уже пробовал:

Я пробовал пройти через каждого человека EventLogEntry без успеха. Данные из List<EventLogEntry> похоже, это не совпадает с тем, к чему призывает dataGridView. Похоже, dataGridView ищет изображение для данных, которых там нет. Я пробовал отлаживать, но он не улавливает никаких ошибок, он работает нормально, он просто выбрасывает исключения каждый второй щелчок, и я не могу сказать, откуда он исходит.

Как я могу заставить это работать должным образом без всех ошибок?

ShadowSMS

Я пробовал отлаживать, но он не улавливает никаких ошибок, он работает нормально, он просто выбрасывает исключения каждый второй щелчок, и я не могу сказать, откуда он исходит.

Patrice T

Вы не знаете, что такое отладка

CHill60

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

j snooze

Могу ли я предложить добавить try{}catch (Exception ex){} в каждый из ваших методов вокруг вашего кода и сделать некоторую обработку ошибок. Сделайте ящик для сообщений.Show ("MethodName:" + ex. Message), то вы будете знать, откуда он исходит и сообщение об ошибке.

ShadowSMS

Хорошо, я попробовал использовать try{}catch {}, но, похоже, его нет в коде. Он вызывает ошибку только после запуска кода и начинает визуально загружать ее в DataGridView в windows forms.

Peter_in_2780

Вы читали последнюю строку сообщений об ошибках? Мне это кажется довольно ясным:
"Чтобы заменить этот диалог по умолчанию, пожалуйста, обработайте событие DataError."

Graeme_Grant

Глядя на ваше видео, кажется, что ссылки на изображения сломаны или искажены. Но, как указал Питер, сообщение об ошибке совершенно ясно.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Я пробовал отлаживать, но он не улавливает никаких ошибок, он работает нормально, он просто выбрасывает исключения каждый второй щелчок, и я не могу сказать, откуда он исходит.

Ваш код не работает нормально, потому что он выдает ошибки.
Отладчик не выбирает никаких ошибок, он просто показывает вам, что делает ваш код.
Ваша обязанность-следить за тем, чтобы он делал то, что должен.
-----
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.