【发布时间】:2011-01-11 04:14:55
【问题描述】:
我正在创建一个线程化的应用程序。我将 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;
}
}
}
有什么不好的吗?
【问题讨论】:
-
您能否更具体地说明什么不起作用?它不隐藏吗?不显示?两个都?不够快?
-
嗯,我现在不确定。我已经对这段代码进行了一些巧妙的测试,现在它似乎可以正常工作了。我将使用我在第一篇文章中发布的代码进行更多测试并报告回来。但也许有更好/更快的方法?
标签: c# winforms user-interface show-hide