2014-12-06 59 views
-1

我有在我使用的Web引用顯示帳戶特定user.Here當前短信平衡一個Windows應用程序是我使用的代碼:如何在C#中進行處理時顯示「請稍候」消息框?

Thread t1 = new Thread(new ThreadStart(ShowWaitMessage)); 
      t1.Start(); 
      XmlNode xmlnde = ws.BSAcBalance(txtLoginId.Text, txtPassword.Text); 
      string sResponse = xmlnde.ChildNodes[0].InnerXml; 
      if (sResponse.Contains("Authentication Failed")) 
      { 
       t1.Abort(); 
       MessageBox.Show("Invalid login id or password !", "Information", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);      
      } 
      else 
      { 
       t1.Abort(); 
       MessageBox.Show("Total balance in your account is Rs : " + sResponse , "Information", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
      } 

public void ShowWaitMessage() 
    {    
     MessageBox.Show("Please Wait ......"); 
    } 

的ws.BSAcBalance是將應用程序連接到Web的方法,需要大約2到3秒才能執行。與此同時,我想顯示一個「Please Wait」消息,我正在嘗試使用線程並通過消息框顯示消息。現在,一旦所需操作完成,我想要「請稍候」消息框隱藏,但那不會發生,我該怎麼辦?

+1

請等待不應該是一個消息框,在所有。它應該像啓動畫面或非模態窗口。它是一個簡單的窗體,你可以使用'form.Close()'關閉它'永遠不要使用'Thread.Abort'。 – 2014-12-06 12:40:42

+0

讓你的用戶界面脫離線程。顯示消息,在另一個線程中進行調用,並在返回時使用該值調用UI。在回調函數中顯示值並隱藏框。 – dbugger 2014-12-06 12:44:56

+0

將鼠標光標更改爲等待光標可能就足夠了嗎? – RenniePet 2014-12-06 13:24:52

回答

0

MessageBox被設計爲接受用戶的輸入。所以它不會提供任何「本地」方式來以編程方式關閉它。你有兩個選擇:

選項1.

一)定義一個新的類WaitForm,從System.Windows.Forms.Form而得;

b)定義公開方法CloseMeWaitForm中,一旦從外部調用,將執行Form.Close()

c)當需要顯示等待消息並調用它的繼承方法ShowDialog()時,創建一個WaitForm的實例。

d)一旦您的操作完成,請致電CloseMe從您的線程。

選項2:(力的MessageBox收盤)

使用Windows API函數FindWindow,這是不是本地的.NET。所以,你必須包括:

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); 
  • 然後,一旦操作完成,調用

IntPtr hWnd = FindWindowByCaption(IntPtr.Zero, <YourWaitMessageBoxTitle>); if (hWnd.ToInt32() != 0) PostMessage(hWnd, WM_CLOSE, 0, 0);

相關問題