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;
        }
    }


Спасибо, помогло!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.