Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 4
.NET 4.x

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

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

Студворк — интернет-сервис помощи студентам
Пишу программу на 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
5548 / 4311 / 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
5548 / 4311 / 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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru