【发布时间】:2016-07-28 17:00:23
【问题描述】:
我已经在这个问题上摸索了一段时间,尽管正在寻找解决方案,但我不太了解实现(已经查看了有关堆栈溢出的几个答案)
我的程序在打开时会加载一个启动页面,在此期间它会检查数据库连接。如果有连接,则启动页面关闭并加载主窗体,否则它会提供错误消息然后完全关闭。
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()。我读过一些关于调用方法的内容,但我不太清楚如何实现上述结果。
最初我尝试使用表单加载/显示事件而不是备用线程,但在消息框显示错误(而不是显示,然后运行连接检查)之前,表单上的图像无法加载
【问题讨论】:
-
你能不能在一个返回真或假连接的任务中做数据库,然后你就等着它关闭应用程序还是根据结果继续?
-
它有问题,会给你带来很多痛苦。 .NET Framework 已经有 excellent support 用于启动屏幕,最好使用它。
标签: c# multithreading