2014-05-02 37 views
0

我有一个C#Windows程序,提供30天的免费试用。之后,用户必须购买产品或将其锁定。当程序查询我的Web服务器时,我做了一个启动画面以占用用户,以查看用户是否篡改数据以尝试让程序运行而不购买它。独立线程上的初始屏幕隐藏服务器响应

在我的Windows 8机器上(我使用.Net Framework 3.5),启动画面很好地显示出来,然后MessageBox出现(在闪屏上方),给他们提供信息,如“30天免费审判还剩2天“。

但是,在我的XP机器上,MessageBox被启动画面隐藏。关于如何我可以SendToFront()的MessageBox或SendToBack()启动画面的任何想法?如果我只是试图将启动画面上的表单发送到后面,这与将整个线程发送到后面不一样。

下面就来显示启动画面代码:

static public void ShowSplashScreen() { 
    // Make sure it's only launched once. 
    if (ms_frmSplash != null) 
     return; 

    ms_oThread = new Thread(new ThreadStart(SplashScreen.ShowForm)); 
    ms_oThread.Name = "SplashScreenThread"; 
    ms_oThread.IsBackground = true; 
    ms_oThread.SetApartmentState(ApartmentState.STA); 
    ms_oThread.Start(); 

    while (ms_frmSplash == null || ms_frmSplash.IsHandleCreated == false) { 
     System.Threading.Thread.Sleep(TIMER_INTERVAL); 
    } 
} 
+0

某些源代码对于诊断问题确实有帮助。 – Pseudonym

+1

您是否正在运行主GUI线程的启动画面和消息框? – MikeH

+0

我用这个为http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C。它从一个单独的线程运行启动画面。我将ShowSplashScreen()的代码添加到原始问题中......谢谢! – Chuck

回答

0

没有看到所有的代码,我认为正在发生的事情是这样的: 你在一个单独的线程从主界面线程运行闪屏,然后从主GUI线程(或另一个线程)启动消息框。独立线程上的接口将独立运行(读取:不规律)Z阶。尝试将您的GUI元素(启动画面和消息框)移动到主线程。在另一个线程上运行所有长时间运行的进程(服务器检查)。

0

好的,我明白了Servy和MikeH在说什么,但我担心的是我做了一堆工作,但仍然无法工作。或者,从机器到机器都不可预测。因此,我要采取的方法是增强启动画面,以便从服务器显示结果,而不是将其呈现在单独的窗口中。这样,没有Z顺序担心...

感谢您的想法,但我可能需要他们以后!