我正在努力尋找一種方法來創建我想要使用C#的表單功能。從外部線程關閉模式對話框 - C#
基本上,我想要一個具有指定超時時間的模式對話框。看起來這應該很容易做到,但我似乎無法完成它的工作。
一旦我呼叫this.ShowDialog(parent)
,程序流程停止,並且我沒有辦法在用戶沒有先點擊按鈕的情況下關閉對話框。
我嘗試使用BackgroundWorker類創建一個新的線程,但我無法讓它關閉另一個線程上的對話框。
我失去的東西在這裏很明顯?
感謝您提供的任何見解。
我正在努力尋找一種方法來創建我想要使用C#的表單功能。從外部線程關閉模式對話框 - C#
基本上,我想要一個具有指定超時時間的模式對話框。看起來這應該很容易做到,但我似乎無法完成它的工作。
一旦我呼叫this.ShowDialog(parent)
,程序流程停止,並且我沒有辦法在用戶沒有先點擊按鈕的情況下關閉對話框。
我嘗試使用BackgroundWorker類創建一個新的線程,但我無法讓它關閉另一個線程上的對話框。
我失去的東西在這裏很明顯?
感謝您提供的任何見解。
使用System.Windows.Forms.Timer。將其Interval屬性設置爲您的超時時間,並將其Tick事件處理程序設置爲關閉對話框。
partial class TimedModalForm : Form
{
private Timer timer;
public TimedModalForm()
{
InitializeComponent();
timer = new Timer();
timer.Interval = 3000;
timer.Tick += CloseForm;
timer.Start();
}
private void CloseForm(object sender, EventArgs e)
{
timer.Stop();
timer.Dispose();
this.DialogResult = DialogResult.OK;
}
}
計時器在UI線程上運行,因此可以安全地從tick事件處理程序關閉窗體。
可以Invoke從後臺線程
您需要調用Close方法創建窗體的線程上的接近:
theDialogForm.BeginInvoke(new MethodInvoker(Close));
如果你真的想要一個模態對話框,那麼我發現這是目前最好的解決方案:http://www.codeproject.com/KB/miscctrl/CsMsgBoxTimeOut.aspx(閱讀評論部分的一個小修改)。
如果你想以模態方式顯示你自己的表格,那麼adrianbanks的解決方案是最好的。