.NET 4.x Добрый день, как сделать так, что бы программа не останавливалась на выводе MessgeBox'a? - C#
Формулировка задачи:
В процессе написания моей программы, у меня появилось пара вопросов:
1) Как сделать так, что бы при выводе мсгбокса программа ждала его закрытия 5 секунд и если оно его не закроют через это время, продолжит работу(если в мсгбоксе есть варианты кнопок (да/нет), считает, что ответ - Да и продолжает работу)?
2) Как закрыть программу(мою) у которой есть перехватчик закрытия:
void MainFormFormClosing(object sender, FormClosingEventArgs e) { this.Hide(); e.Cancel = true; }
Решение задачи: «.NET 4.x Добрый день, как сделать так, что бы программа не останавливалась на выводе MessgeBox'a?»
textual
Листинг программы
public class AutoClosingMessageBox { System.Threading.Timer _timeoutTimer; string _caption; AutoClosingMessageBox(string text, string caption, int timeout) { _caption = caption; _timeoutTimer = new System.Threading.Timer(OnTimerElapsed, null, timeout, System.Threading.Timeout.Infinite); MessageBox.Show(text, caption); } public static void Show(string text, string caption, int timeout) { new AutoClosingMessageBox(text, caption, timeout); } void OnTimerElapsed(object state) { IntPtr mbWnd = FindWindow(null, _caption); if (mbWnd != IntPtr.Zero) SendMessage(mbWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); _timeoutTimer.Dispose(); } const int WM_CLOSE = 0x0010; [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д