如何显示"请等待"在C#中进行处理的消息框?

时间:2014-12-06 12:30:16

标签: c# multithreading messagebox

我有一个Windows应用程序,我在其中使用Web引用来显示特定用户帐户中的当前SMS余额。这是我正在使用的代码:

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秒。同时,我想显示一条“请等待”消息,我正在尝试使用线程并通过消息框显示消息。现在所需的操作完成后,我想要“请等待”消息框隐藏,但那不会发生。我该怎么办?

1 个答案:

答案 0 :(得分:0)

MessageBox旨在吸引用户的输入。所以它没有提供任何“本地”方法以编程方式关闭它。您有两个选择:

选项1.

a)定义一个新的类WaitForm,派生自System.Windows.Forms.Form;

b)在CloseMe中定义一旦从外部调用就会执行WaitForm的公共方法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);