Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2017, 09:39   #1
Sizova
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 25
По умолчанию Отловить ошибку System.Threading.ThreadAbortExcepti on

Необработанное исключение типа "System.Threading.ThreadAbortExcept ion" в System.Drawing.dll
Код:
public Main()
        {
            Thread t = new Thread(new ThreadStart(Splash)); //создаем экземпляр класса
            t.Start(); //запускаем поток
            InitializeComponent();
            t.Abort(); //завершаем работу потока
        }
        //метод, создающий загрузочный экран
        static public void Splash()
        {
            SplashScreen.SplashForm frm = new SplashScreen.SplashForm(); //создаем экземпляр класса
            frm.AppName = "Мой финансист v 0.1.4"; //задаем надпись
            frm.Icon = Properties.Resources.purse; //задаем эконку загрузочного окна
            frm.BackgroundImage = Properties.Resources.openning; //задаем изображение загрузочного окна
            Application.Run(frm); //запускаем загрузочное окно
        }
есть вот такой код. периодически появляется ошибка, значащая, процесс находился в процессе прерывания. помогите, отловить эту ошибку
Текст ошибки "Необработанное исключение типа "System.Threading.ThreadAbortExcept ion" в System.Drawing.dll
Дополнительные сведения: Поток находился в процессе прерывания."

Последний раз редактировалось Sizova; 12.04.2017 в 09:44. Причина: Добавление информации
Sizova вне форума Ответить с цитированием
Старый 12.04.2017, 09:50   #2
hoolygan
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 64
По умолчанию

Ну так а в чем проблема-то?
Вы создаете поток, в котором запускаете Splash()
Дальше в этот поток вы запускаете Abort, а он и создает исключение в потоке - вот и отлавливайте его кетчем в вашем методе - и обрабатывайте.
hoolygan вне форума Ответить с цитированием
Старый 12.04.2017, 10:35   #3
Sizova
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 25
По умолчанию

Ну проблема как бы в том, что у меня это не получается сделать. Если бы получилось отловить catch, то я бы явно сюда не писала
Sizova вне форума Ответить с цитированием
Старый 12.04.2017, 10:51   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

данный код вообще не имеет смысла.
исключение вполне логично, у вас в процессе инициализации вылетает ошибка.
UI поток не должен так завершаться.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.04.2017, 11:05   #5
Sizova
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 25
По умолчанию

почему не имеет смысла? мне нужен загрузочный экран перед запуском программы, без этого кода этого не будет.
как по-твоему будет правильнее?)
Sizova вне форума Ответить с цитированием
Старый 12.04.2017, 11:52   #6
hoolygan
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 64
По умолчанию

А зачем так делать, через одно место?
Если это UI - то зачем аналом заниматься с потоками? Давно уже придумали асинхронные шаблоны, а недавно вон придумали async/await, а еще раньше модальные окна. Какая задача-то стоит? Если просто вызвать окошко, то вызывайте в момент инициализации - то делайте frm.ShowModal(). И поймите - пока вы увидите окошко, подумаете, что оно выскакивает или нет - ваш комп обработает миллионы операций, не думайте с позиции человека, человек по природе тупит, не может обработать много инфы, а комп быстрый.
hoolygan вне форума Ответить с цитированием
Старый 12.04.2017, 14:56   #7
Sizova
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 25
По умолчанию

Кажется, мы друг друга немного не понимаем
Если модально грузить форму, то получается не то, что мне нужно
Мне нужно, чтобы пока интерфейс программы загружается, висел этот экран, чтобы не было ощущения как будто программа не запускается

Последний раз редактировалось Sizova; 12.04.2017 в 15:01.
Sizova вне форума Ответить с цитированием
Старый 12.04.2017, 15:08   #8
hoolygan
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 64
По умолчанию

Нет, я вас понял прекрасно. У Вас инициализация!! проходит дофига времени? Тогда сделайте новый класс с новой формой - и запускайте ее сразу же, контруктор формы запускайте сразу же, до инициализации формы основного класса. А как только инициализация закончилась - закрывайте форму. Вы же пошли в лоб. Да и что такое нужно загружать из того, чего нельзя подгрузить асинхронно уже после загрузки формы основной?
hoolygan вне форума Ответить с цитированием
Старый 12.04.2017, 15:34   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нужно инициализацию выносить в иной поток, а не интерфейс.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTPServer1 отловить ошибку Lui C++ Builder 0 15.02.2013 13:27
как отловить ошибку? madace Microsoft Office Excel 1 14.02.2013 12:09
Нужен совет, как отловить ошибку? WarHamster Общие вопросы .NET 3 12.07.2012 16:07
Задача на наследование...не могу отловить ошибку assasin Общие вопросы C/C++ 13 06.06.2009 17:34
Как отловить ошибку в своей проге ??? Crazyman Win Api 8 02.09.2008 09:24