Модальное окно или MessageBox из не основного потока
От: horn Россия  
Дата: 24.12.11 13:31
Оценка:
Доброго...

namespace test_thread_window
{
    public partial class MainForm : Form
    {
        private Thread someThread;
        private threadclass work;
        
        public MainForm()
        {
            InitializeComponent();

            work = new threadclass();
            //work.UserRequestEvent += new threadclass.UserRequest(OnUserRequest);

            someThread = new Thread(new ThreadStart(work.DoWork));
            someThread.Start();
        }

        /*
        void OnUserRequest(object sender, EventArgs e)
        {
            MessageBox.Show("Test message.", "Test", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        */ 

        private void MainForm_Load(object sender, EventArgs e)
        {
            // ...
        }
    }

    public class threadclass
    {
        public delegate void UserRequest(object sender, System.EventArgs e);
        public event UserRequest UserRequestEvent;
        
        public void DoWork()
        {
            Thread.Sleep(1000);
            //UserRequestEvent(this, new EventArgs());

            // здесь нужно вызвать MessageBox
            // ...
        }
    }

}


Сабж.

ЗЫ: Если раскомментировать код, то MessageBox будет виден, но он не будет обладать свойством модальности (если так можно выразиться ).
c# .net thread winforms
Re: Модальное окно или MessageBox из не основного потока
От: Danchik Украина  
Дата: 24.12.11 14:58
Оценка: 2 (1)
Здравствуйте, horn, Вы писали:

H>ЗЫ: Если раскомментировать код, то MessageBox будет виден, но он не будет обладать свойством модальности (если так можно выразиться ).


Именно потому что оно становится модальным только для окон своего потока.
Синхронизируйте показывание диалога через главную форму (Control.Invoke)
http://msdn.microsoft.com/ru-ru/library/zyzhdc6b.aspx — посмотрите на примеры.
Re[2]: Модальное окно или MessageBox из не основного потока
От: horn Россия  
Дата: 24.12.11 15:37
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, horn, Вы писали:


H>>ЗЫ: Если раскомментировать код, то MessageBox будет виден, но он не будет обладать свойством модальности (если так можно выразиться ).


D>Именно потому что оно становится модальным только для окон своего потока.

D>Синхронизируйте показывание диалога через главную форму (Control.Invoke)
D>http://msdn.microsoft.com/ru-ru/library/zyzhdc6b.aspx — посмотрите на примеры.

namespace test_thread_window
{
    public partial class MainForm : Form
    {
        private Thread someThread;
        private threadclass work;
        public delegate void MyDelegate();
        public MyDelegate myDelegate;
        
        public MainForm()
        {
            InitializeComponent();

            work = new threadclass(this);
            myDelegate = new MyDelegate(ShowMessage);

            someThread = new Thread(new ThreadStart(work.DoWork));
            someThread.Start();
        }

        public void ShowMessage()
        {
            MessageBox.Show("Test message.", "Test", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        
    }

    public class threadclass
    {
        private MainForm refToMainForm;
        
        public void DoWork()
        {
            Thread.Sleep(1000);

            // здесь нужно вызвать MessageBox
            refToMainForm.Invoke(refToMainForm.myDelegate);
        }

        public threadclass(MainForm _refToMainForm)
        {
            refToMainForm = _refToMainForm;
        }
    }


Спасибо, помогло!
Re[2]: Недорогая и Качественная пленка для Вашего Авто.
От: Аноним  
Дата: 31.03.12 10:57
Оценка:
<b>Здравствуйте Уважаемые автолюбители и профессионалы!</b>

Хотим предложить Вам сотрудничество в поставках виниловых пленок для автомобилей. Самые низкие цены в РФ и СНГ. Для дилеров цена обговаривается отдельно. По качеству пленка не уступает дорогим европейским и японским аналогам. Пленка производится под заказ и ввозится под нашим брендом с крупных мануфактур Китая что позволяет исключить кустарное производство.
Ассортимент в наличии.

Мы так же можем привезти под заказ любой материал. У наших поставщиков есть огромный ассортимент на любой вкус и цвет. Так же предоставляем услуги по оклейке пленкой всех автомобилей. Находимся в Москве.
Наши контактные данные:
<a href=http://www.artifilm.ru>http://www.artifilm.ru</a>
e-mail: carbon3d@russia.ru
Телефон-1: 8-967-163-50-40
Телефон-2: 8-909-940-41-03
Мы Вконтакте: <a href=http://www.artifilm.ru>http://vkontakte.ru/carbon_auto </a>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.