Здравствуйте, 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;
}
}
Спасибо, помогло!