【发布时间】:2012-08-02 05:14:39
【问题描述】:
我是 c# 的新手,我正在处理软件启动时运行的启动屏幕。我在启动屏幕类中有一个检查数据库的函数。我正在使用线程来调用函数
sc = new splashScreen();
checkDLLThread = new Thread(new ThreadStart(sc.checkDLLS).BeginInvoke);
checkDLLThread.Start();
while (checkDLLThread.IsAlive)
{
Thread.Sleep(200);
}
问题是 UI 被阻塞,直到线程处于活动状态。最后它给了我数据库连接状态消息。 这是我的代码。我使用了 checkDLLThread.join() 但它也不起作用。
【问题讨论】:
-
你为什么不直接删除睡眠?这就是阻止 UI 的原因。
-
我已经尝试删除 sleep ,然后循环阻塞 UI
-
好吧,当然也要删除循环;-) 解除对 UI 线程的阻塞需要从事件处理程序返回。
-
这就是问题所在,我想检查数据库是否已初始化,它不仅仅是一个闪屏,我正在后台检查我的数据库。如果数据库连接失败,则会显示正确的消息并退出应用程序
-
如果可以的话,这个答案中有一些有用的例子:stackoverflow.com/questions/48916/…。这里还有codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C 的例子;您可以在主线程继续其需要完成的工作时在新线程中显示启动屏幕,并且在完成后,它可以向启动屏幕发出信号以关闭。
标签: c# database winforms thread-safety