Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Код работает только с breakpoint-ом, а без него не работает 
V
    Опции темы
Kefir
Дата 16.1.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Собственно есть таймер, по которому абортится тред. На первом же тике идёт thread.Abort();
Тред - поле класса:
Код

        Thread tErrorScreen;
        private DispatcherTimer _ErrorScreenTimer = new DispatcherTimer();

Метод начинающий тред:
Код

        public void Popup()
        {
            tErrorScreen = new Thread(new ThreadStart(delegate()
            {
                PopupError p
                try {
                    p = new PopupWindow();
                    p.ShowDialog();
                }
                catch
                {
                    p.Close();
                }
            }));
            tErrorScreen.SetApartmentState(ApartmentState.STA);
            tErrorScreen.Start();

            // set up new timer
            this._ErrorScreenTimer = new DispatcherTimer();
            this._ErrorScreenTimer.Tick += new EventHandler(timer_Tick);
            this._ErrorScreenTimer.Interval = new TimeSpan(0, 0, 5);
            this._ErrorScreenTimer.IsEnabled = true;
        }

И тик таймера:
Код

        void timer_Tick(object sender, EventArgs e)
        {
            this._ErrorScreenTimer.IsEnabled = false;
            this._ErrorScreenTimer.Tick -= timer_Tick;
            tErrorScreen.Abort();
        }


Собственно всё бы ничего, но проблема в том, что в итоге при выполнении кода таймер тикает очень непонятно - очень рандомно тригерит тик (чисто так как попало, иногда и больше минуты может занять это дело). Однако, если поставить в любое место timer_Tick брейкпойнт, то всё работает так как надо. Брейкпойнт именно с остановкой проги.

А что такое то? А то я даже посмотреть не могу в чём дело - брейкпойнты не поставишь, так как сразу начинает нормально работать!
PM MAIL WWW Skype   Вверх
Kefir
Дата 16.1.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Так, вроде понял закономерность. Дело в том, что таймер то тикает и окно "закрывается" (p.Close();). Однако WPF не прорисовывает то что окна больше нет. Надо подвигать мышой чтобы окно "отрисовалось", а точнее убралось в экрана. Теперь вот думаю, как заставлять его прорисовать.
PM MAIL WWW Skype   Вверх
_Jesus
Дата 16.1.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 16.1.2008

Репутация: нет
Всего: нет



Может я чего не понял, но мне кажется, что это из-за потока. Нет синхронизации. Поэтому тики идут хаотично. А когда ставишь бряки, то  выполнение стопорится и поэтому обработка идёт по-порядку.
PM MAIL   Вверх
Kefir
Дата 16.1.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



_Jesus, в общем я уже написал в чём проблема. А вообще Join не помог - я его в тик пытался сувать.
PM MAIL WWW Skype   Вверх
tol05
Дата 16.1.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



PopupError p сделай членом класса, а в timer_Tick проверяй сначала состояние PopupError и  перед прерыванием потока проверяй состояние PopupError и закрывай его. 
Через Invoke, как я понял.

P.S. Что-то как-то сложно написал  smile упростил текст немного.

Это сообщение отредактировал(а) tol05 - 16.1.2008, 18:15


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Kefir
Дата 16.1.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



tol05, супер, как-то я не додумался из главного треда закрыть окно  smile Спасибо за помощь. +1

Добавлено через 1 минуту и 31 секунду
* Закрываю тему *
PM MAIL WWW Skype   Вверх
farad
Дата 16.1.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: -1
Всего: 6



Цитата(_Jesus @  16.1.2008,  18:06 Найти цитируемый пост)
Может я чего не понял
я тоже чего-то не понял, использование потоков здесь как собаке пятое колесо. по крайней мере это следует из приведенного кода. По меньшей мере странно запускать отдельный поток, только лишь для того, чтобы в нем открыть модальный диалог, который в отдельном потоке превращается по сути в немодальный...

Это сообщение отредактировал(а) farad - 16.1.2008, 19:42
PM MAIL   Вверх
Kefir
Дата 16.1.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



farad, причины есть. Я же не постю абсолютно весь код дабы люди не отвлекались на мелочи. Вас не касается что в это время происходит в программе. Есть на то причины. И на счёт пятого колеса - это как раз про ваш пост.
PM MAIL WWW Skype   Вверх
farad
Дата 16.1.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: -1
Всего: 6



Цитата(Kefir @  16.1.2008,  19:44 Найти цитируемый пост)
И на счёт пятого колеса - это как раз про ваш пост.
вполне возможно.. и меня это не касается..Т.е. если можно сделать сложно, незачем делать просто? я правильно понял? 
 smile 

Это сообщение отредактировал(а) farad - 16.1.2008, 21:46
PM MAIL   Вверх
tol05
Дата 16.1.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(farad @  16.1.2008,  19:31 Найти цитируемый пост)
вполне возможно.. и меня это не касается..Т.е. если можно сделать сложно, незачем делать просто? я правильно понял? 


farad, если можно сделать, то нафиг это нужно?
 я лично так обычно понимаю smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.