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

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

19.02.2014, 22:59. Показов 2545. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru