C# 单独线程上的启动屏幕隐藏服务器响应

C# 单独线程上的启动屏幕隐藏服务器响应,c#,screen,splash-screen,C#,Screen,Splash Screen,我有一个C#Windows程序,提供30天的免费试用。之后,用户必须购买该产品,否则将被锁定。当程序查询我的web服务器时,我制作了一个启动屏幕来占用用户,以查看用户是否在篡改数据,从而试图让程序在不购买的情况下运行 在我的Windows8机器上(我使用的是.NETFramework3.5),启动屏幕显示得很好,然后出现MessageBox(在启动屏幕上方),向他们提供类似“30天免费试用还有2天”的信息 但是,在我的XP机器上,MessageBox被启动屏幕隐藏。关于如何在MessageBox

我有一个C#Windows程序,提供30天的免费试用。之后,用户必须购买该产品,否则将被锁定。当程序查询我的web服务器时,我制作了一个启动屏幕来占用用户,以查看用户是否在篡改数据,从而试图让程序在不购买的情况下运行

在我的Windows8机器上(我使用的是.NETFramework3.5),启动屏幕显示得很好,然后出现MessageBox(在启动屏幕上方),向他们提供类似“30天免费试用还有2天”的信息

但是,在我的XP机器上,MessageBox被启动屏幕隐藏。关于如何在MessageBox前发送()或在启动屏幕上发送()有什么想法吗?如果我只是尝试将启动屏幕上的表单发送到后面,这与将整个线程发送到后面不同

以下是显示启动屏幕的代码:

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);
    }
}

在没有看到所有代码的情况下,我认为发生的是:
您可以在独立于主GUI线程的单独线程上运行启动屏幕,然后从主GUI线程(或另一个线程)启动消息框。单独线程上的接口将独立地(读取:不规则地)为其Z顺序执行操作。尝试将GUI元素(启动屏幕和消息框)移动到主线程。在另一个线程上运行所有长时间运行的进程(您的服务器检查)。

好的,我知道Servy和MikeH在说什么,但我担心的是,我做了很多工作,但仍然不起作用。或者,从一台机器到另一台机器是无法预测的。因此,我将采取的方法是增强初始屏幕,以便它显示来自服务器的结果,而不是在单独的窗口中显示。这样,根本不用担心Z顺序


谢谢你的想法,不过,我以后可能需要它们

一些源代码对诊断您的问题非常有用。您是否从主GUI线程运行启动屏幕和消息框?我用于此。它从一个单独的线程运行启动屏幕。我将在原始问题中添加ShowSplashScreen()的代码…谢谢!您的程序不应该使用多个UI线程。与其创建第二个UI线程,然后阻塞原始UI线程,不如在原始UI线程中显示初始屏幕,并在新线程中执行非UI工作。