2014-05-02 38 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順序擔心...

感謝您的想法,但我可能需要他們以後!