我一直在摸索這一塊頭,現在儘管尋找解決方案,我不太瞭解實現(堆棧溢出的幾個答案已經看過)從子線程關閉父窗體
我的程序在打開時會加載一個啓動頁面,在此期間它會檢查數據庫連接。如果有連接,則啓動頁面關閉並加載主窗體,否則會提供錯誤消息,然後完全關閉。
public partial class StartupSplash : Form
{
ThreadStart th;
Thread thread;
public StartupSplash()
{
InitializeComponent();
th = new ThreadStart(DbAvaliable);
thread = new Thread(th);
thread.Start();
}
private void DbAvaliable()
{
Boolean result = false;
using (var connectiontest = new SqlConnection("myConnString"))
try
{
connectiontest.Open();
result = true;
}
catch (Exception ex)
{
result = false;
}
if (result)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainWindow());
}
else
{
MessageBox.Show("Unable to establish database connection. Please check your data connection and try again.");
}
}
}
據我所知,由於交叉線程問題,我不能簡單地致電this.Close()
。我讀過一些關於調用方法的內容,但我不太清楚如何實現上述結果。
最初我試圖使用形式加載/顯示的事件,而不是交替的螺紋,但在形成圖像未能加載,直到後在MessageBox已示出的錯誤(而不是顯示,然後運行該連接檢查)
你可以在連接返回true或false的任務中執行db,然後你只需等待它並關閉應用程序或繼續根據結果? – Jacobr365
它是越野車,並會給你造成很大的悲痛。對於啓動畫面,.NET Framework已經有[極好的支持](http://stackoverflow.com/a/393870/17034),而最好使用它。 –