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