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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модальная форма 
:(
    Опции темы
zss
Дата 17.11.2006, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть форма, которая запускает поток и в потоке отображает изменяющиеся часы часы.
Она отображается, когда например происходят долгие вычисления.

Код

/* -------------------------------------------------------------------------- */
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Text;
using System.Windows.Forms;
/* -------------------------------------------------------------------------- */
namespace mcl
{
    public partial class WaitForm : Form
    {
        /* ------------------------------------------------------------------ */
        private static int m_index = 0;
        private static WaitForm m_form = null;
        private static Thread m_thread = null;
        private static String m_message;
        /* ------------------------------------------------------------------ */
        private WaitForm ()
        {
            InitializeComponent();
            MessageLabel.Text = m_message;
        }
        /* ------------------------------------------------------------------ */
        public static void show(String message)
        {
            m_index = 0;
            m_message = message;
            ThreadStart start = new ThreadStart (run);
            m_thread = new Thread (start);
            m_thread.Start();
            Thread.Sleep(1000 /*2000*/);
        }
        /* ------------------------------------------------------------------ */
        public static void close()
        {
            m_form.Invoke(new EventHandler(m_form.Close));
            m_form.Dispose();
        }
        /* ------------------------------------------------------------------ */
        private static void run ()
        {
            m_form = new WaitForm ();
            Application.Run(m_form);
        }
        /* ------------------------------------------------------------------ */
        private void WaitForm_Load(object sender, EventArgs e)
        {
            int screenWidth = Screen.PrimaryScreen.Bounds.Width;
            int screenHeight = Screen.PrimaryScreen.Bounds.Height;
            int x = (screenWidth - this.ClientSize.Width) / 2;
            int y = (screenHeight - this.ClientSize.Height) / 2;

            this.Location = new Point(x, y);
            this.Timer.Enabled = true;
        }
        /* ------------------------------------------------------------------ */
        private void Close(object sender, EventArgs e)
        {
            this.Timer.Enabled = false;
            this.Close();
        }
        /* ------------------------------------------------------------------ */
        private void Timer_Tick(object sender, EventArgs e)
        {
            int count = ClockImages.Images.Count;
            PictureBox.Image = ClockImages.Images[m_index++ % count];
        }
        /* ------------------------------------------------------------------ */
    }
}
/* -------------------------------------------------------------------------- */


запускается форма так

Код

WaitForm.show("Пожалуйста, подождите...");
// здесь вычисления
WaitForm.close();
Application.DoEvents();




1. форма почему-то не работает без Thread.Sleep(1000) - почему
2. если приложение слетает или принудительно закрывается, то основная форма закрывается,
а эта иногда нет. Странно - разве процесс не должен почистить все за собой.

P.S. или что я не совсем так делаю

спасибо 
PM MAIL ICQ   Вверх
Softaz
Дата 17.11.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Цитата(zss @  17.11.2006,  21:30 Найти цитируемый пост)
Thread.Sleep(1000

Этим ты останавливаешь основной поток программы.

Еще в классе ты создаешь новый тред. Надо его убивать.


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
zss
Дата 17.11.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Softaz @  17.11.2006,  21:57 Найти цитируемый пост)
Еще в классе ты создаешь новый тред. Надо его убивать. 

убивать в close ?
PM MAIL ICQ   Вверх
archimed7592
Дата 17.11.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



убивается он аккурат, когда заканчивается message loop...т. е. после строки application.run


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
mr.DUDA
Дата 18.11.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Раз show статик метод, то надо бы организовать проверку - вдруг уже есть поток с часами. И если есть - не стартовать второй.


--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 18.11.2006, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



проблема в том, что в close event handler есть вызов this.Close smile 


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zss
Дата 19.1.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



извиняюсь, что поднимаю тему. Добавил в close убийство потока smile

Но все-равно форма ведет себя странно. Иногда просто не закрывается. Иногда сваливает с исключением на 
m_form.Invoke(new EventHandler(m_form.Close));

что еще нужно сделать ?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 19.1.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Поставить try..catch и ловить все исключения подряд.


--------------------
user posted image
PM MAIL WWW   Вверх
zss
Дата 19.1.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mr.DUDA @  19.1.2007,  11:51 Найти цитируемый пост)
Поставить try..catch и ловить все исключения подряд.

а закроется ли тогда форма ? Или останется висеть ?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 19.1.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Есть шанс что закроется smile


--------------------
user posted image
PM MAIL WWW   Вверх
zss
Дата 19.1.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mr.DUDA @  19.1.2007,  13:17 Найти цитируемый пост)
Есть шанс что закроется smile 

smile ну а остальное то хоть приблизительно правильно? а то может не там ловлю smile
PM MAIL ICQ   Вверх
zss
Дата 20.1.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mr.DUDA @  19.1.2007,  13:17 Найти цитируемый пост)
Есть шанс что закроется 

что-то у меня оявились сомнения в том, что все закроется.

Я наверное так и не смогу дождаться потока, т.к. в потоке у меня запуск формы
Код

            m_form = new WaitForm ();
            Application.Run(m_form);


а дождусь его я только после ее закрытия. Тоесть дедлок smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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