0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 4
.NET 4.x

Как поймать исключение из другого потока?

19.02.2014, 22:59. Показов 2440. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программу на C#. Суть программы - написать класс который анализирует файл и в случае не корректности выбрасывает исключение, анализ файла должен быть в отдельном потоке.
Вот мой код класса

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    public class MyClass
    {
        private string _pathFile;
 
        private FileStream fs;
        private StreamReader sr;
        private Thread workerThread;
 
        /// <summary>
        /// Флаг на вызов исключения
        /// </summary>
        private bool flag = false;
 
        public MyClass(string pathFile)
        {
            _pathFile = pathFile;
 
            this.workerThread = new Thread(this.Read);
            this.workerThread.Start();
        }
 
        public void Read()
        {
            try
            {                
                // читаем файл
                fs = new FileStream(_pathFile, FileMode.Open, FileAccess.Read);
                sr = new StreamReader(fs, Encoding.UTF8);
 
                // Анализируем файл...
 
                sr.Close();
                fs.Close();
 
                //генерируем исключение
                if (_flagMultiComment)
                {
                    throw new MyException();
                }
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine(e.FileName + " - такой файл не существует");
            }
        }
    }
Код исключения
C#
1
2
3
4
5
6
7
8
9
10
11
12
    [Serializable()]
    public class MyException : System.Exception
    {
        public MyException () : base() { }
        public MyException (string message) : base(message) { }
        public MyException (string message, System.Exception inner) : base(message, inner) { }
 
        // A constructor is needed for serialization when an
        // exception propagates from a remoting server to the client. 
        protected MyException (System.Runtime.Serialization.SerializationInfo info,
            System.Runtime.Serialization.StreamingContext context) { }
    }
Код точки входа

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static void Main(string[] args)
        {
            string FILE = "file.txt";
 
            try
            {
                MyClass m1 = new MyClass(FILE);
                m1.Start();
            }
            catch (MyException)
            {
                Console.WriteLine("Файл не корректный");
            }
 
            Console.ReadKey(true);
        }

В итоге мое исключение остается не обработанным. Мучаюсь уже больше недели, есть ли какая-либо хитрость чтобы решить такую задачу
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2014, 22:59
Ответы с готовыми решениями:

Исключение при обращении из другого потока
Обращаюсь к picturebox из другого потока... записываю в него картинку и освобождаю..с этим никаких проблем. делаю так: ...

Как поймать исключение в Task?
Здраствуйте! Есть код (все лишнее соответственно убрал): try { Task t1 = Task.Run(()=&gt;Method()); Task t2 =...

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

4
Эксперт .NET
 Аватар для insite2012
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.02.2014, 23:02
Лучший ответ Сообщение было отмечено YmNIK12 как решение

Решение

Ну а что Вы ожидали, вы отлавливаете только FileNotFoundException...
Поставьте второй блок catch на Ваше исключение MyException, и ловите его в самом классе...
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 4
19.02.2014, 23:13  [ТС]
insite2012, сразу после генерации самого исключения?

А как сообщить пользователю класса, что в файле есть проблеммы, то есть как реализовать отлавливание исключения в main?
Или оставить как есть и это нормально в практике разработки при подобных случаях?
0
Эксперт .NET
 Аватар для insite2012
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.02.2014, 23:16
Ну да, попробуйте именно так... Или в самом классе поставить отлов только Вашего исключения, а стандартное ловить в main...
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 4
19.02.2014, 23:39  [ТС]
insite2012, Спасибо, помогло, как всегда самый простой ответ под носом .
А то я уже задумался о генерации события вместо исключения.

Проблема решена. Тему можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2014, 23:39
Помогаю со студенческими работами здесь

Как поймать исключение связанное с неправильным итератором?
Доброго времени суток. Не могу поймать исключение, при запуск программы выдает ошибку vector iterator not incrementable. Можно ли поймать...

Как из одного потока узнать состояние другого потока
Подскажите пожалуйста, как из одного потока узнать, что другой поток еще не запущен. Например, второй поток формируется в классе...

Исключение "Невозможно получить доступ к управлению Form1" при использовании ShowDialog с другого потока!
Суть в том, что есть у меня класс типу своего MessageBox, в нем есть статический метод Show(), в котором создается объект этого класса и...

Поймать исключение
Почему-то не ловятся исключения: try { return a.exec(); } catch (...) { qDebug() &lt;&lt;...

Как поймать исключение "System.Data.SqlClient.SqlException" ?
Как поймать исключение &quot;System.Data.SqlClient.SqlException&quot; ? У меня 3 формы (Номенклатура, Приход, Контрагент) все проходит через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru