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

Поиск:

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Добрый день.

Можно ли создавать/показывать формы из других потоков?
Если делаю так:
Код

    static class Program
    {
        [STAThread]
        static void Main ()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form_Notification form = new Form_Notification();

            Application.Run();
        }
}

форма замечательно отображается на экране. А если так:
Код

    static class Program
    {
        [STAThread]
        static void Main ()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
            thread.Start();

            Application.Run();
        }

        private static void DoWork ()
        {
            Form_Notification form = new Form_Notification();
        }
}

формы нет...

Можно ли ее как-то показать вторым способом (не из главного потока)?

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Partizan
Дата 22.6.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



_hunter, у формы не плохо бы вызвать метод Show() ;)

Код

    static class Program
    {
        [STAThread]
        static void Main ()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
            thread.Start();
            Application.Run();
        }
        private static void DoWork ()
        {
            Form_Notification form = new Form_Notification();
            form.Show();
        }
}


однако даже в этом случае мне кажется форма быстро появится и исчезнет...ибо при таком коде быстрое завершение функции Main неизбежно ;)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
_hunter
Дата 22.6.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Она у меня Visible по дефолту... И в первом случае она-то видна...
А Main() в Application.Run() у меня что в первом что во втором случаях колбасит до посинения.



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Partizan
Дата 22.6.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



_hunter, ну я думаю всё-таки стоит попробовать после создания экземпляра вызвать Show/ShowModal, а?

почему Application.Run "колбасит до посинения" тоже понятно


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
_hunter
Дата 22.6.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



пробовал я с Show()...
вот тестовый проект. Если в Test2 () раскоментить вызов Test1 -- показываются две формы, если оставить как есть -- только одна...

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  WindowsApplication1.rar 6,79 Kb


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Partizan
Дата 22.6.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



_hunter, 

Код

   static class Program
    {
        private static System.Threading.Thread _thread;

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Test2();
            Test1();
            

            Application.Run();
        }

        static void Test1()
        {
            Form1 form = new Form1();
            form.ShowDialog();
        }

        static void Test2()
        {
            //Test1();

            _thread = new System.Threading.Thread(new System.Threading.ThreadStart(Test1));
            _thread.Start();
        }
    }


Обе формы показываются успешно...


з.ы. Что удивительного в том, что в твоём примере по завершению потока он вместе со всем его содержимым прибивается?

Добавлено через 6 минут и 11 секунд
кстати говоря, если поставить бряк на form.Show() в Test1, то можно заметить как открываются несколько форм, а затем все кроме одной закрываются...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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