我正在创建一个线程化的应用程序。我将 GUI(公告:表单)作为单独的线程启动。
该窗口将非常简约,只有一个输入框,也许还有一个按钮。在另一个线程上将运行 Tcp 客户端,当它从 TcpServer 获取信息时,它应该将获取的信息传递到该输入框并显示 gui(和最顶层的窗口)。几秒钟后,gui 应该隐藏自己并等待另一个 tcp msg 等等。
public void setTextBox(string varText) {
if (InvokeRequired) {
textBox.BeginInvoke(new textBoxCallBack(setTextBox), new object[] {varText});
} else {
textBox.Text = varText;
}
}
此代码用于从 Tcp 线程填充文本框。现在唯一的问题是正确显示和隐藏窗口。尝试了许多解决方案,但总是出现问题。像:
private void windowStateChange(string varState) {
if (InvokeRequired) {
Invoke(new WindowStateChangeCallBack(windowStateChange), new object[] {varState});
} else {
if (varState == "Hide") {
//Hide();
// TopMost = false;
//TopMost = varState != FormWindowState.Minimized;
} else {
//Show();
//MessageBox.Show("TEST1");
}
}
}
public void windowStateChangeDiffrent(FormWindowState varState) {
if (InvokeRequired) {
Invoke(new WindowStateChangeCallBack(windowStateChange), new object[] {varState});
} else {
WindowState = varState;
// Hide();
TopMost = varState != FormWindowState.Minimized;
}
}
这样做的最佳方法是什么(并且最快,因为时间很重要)?
答案1似乎有效:
private static void windowStateChange(string varState) {
if (mainAnnounceWindow.InvokeRequired) {
mainAnnounceWindow.BeginInvoke(new StateCallBack(windowStateChange), new object[] {varState});
} else {
if (varState == "Hide") {
mainAnnounceWindow.Hide();
mainAnnounceWindow.TopMost = false;
} else {
mainAnnounceWindow.Show();
mainAnnounceWindow.TopMost = true;
}
}
}
有什么不好的吗?