我有一个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 :(得分:0)
如果没有看到您的所有代码,我认为发生的事情是这样的: 您在主GUI线程的单独线程上运行启动画面,然后从主GUI线程(或另一个线程)启动消息框。单独线程上的接口将为其Z顺序独立行动(读取:不正常)。尝试将GUI元素(启动画面和消息框)移动到主线程。在另一个线程上运行所有长时间运行的进程(您的服务器检查)。
答案 1 :(得分:0)
好的,我看到Servy和MikeH在说什么,但我担心的是我做了很多工作但仍然无法工作。或者,它在机器之间无法预测。因此,我要采取的方法是增强启动画面,使其显示服务器的结果,而不是在单独的窗口中显示。那样的话,根本没有任何Z排序可以担心...
感谢您的想法,我稍后可能会需要它们!