Я создаю приложение с многопоточностью. Я запустил GUI (Announce: Form) как отдельный поток.
Это окно будет очень минималистичным с одним полем ввода и, возможно, кнопкой. В другом потоке будет запущен Tcp Client, и когда он получит информацию от TcpServer, он должен передать то, что он получает в это поле ввода, и показать графический интерфейс (и самые верхние окна). Через пару секунд графический интерфейс должен спрятаться и дождаться следующего сообщения TCP и т. Д.
public void setTextBox(string varText) {
if (InvokeRequired) {
textBox.BeginInvoke(new textBoxCallBack(setTextBox), new object[] {varText});
} else {
textBox.Text = varText;
}
}
Этот код используется для заполнения textBox из потока 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;
}
}
}
Что-нибудь плохое в этом?