スレッド化されたアプリを作成しています。別スレッドとして GUI (Announce : Form) を始めました。
そのウィンドウは、入力ボックスが 1 つとボタンが 1 つある非常に最小限のものになります。別のスレッドでは Tcp クライアントが実行されており、TcpServer から情報を取得すると、取得したものをその入力ボックスに渡し、GUI (および最上位のウィンドウ) を表示する必要があります。数秒後、GUI は非表示になり、別の tcp メッセージなどを待つ必要があります。
public void setTextBox(string varText) {
if (InvokeRequired) {
textBox.BeginInvoke(new textBoxCallBack(setTextBox), new object[] {varText});
} else {
textBox.Text = varText;
}
}
このコードは、Tcp スレッドから textBox を埋めるために使用されます。唯一の問題は、ウィンドウの表示と非表示を適切に行うことです。多くのソリューションを試してきましたが、常に何かがうまくいきませんでした。お気に入り:
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;
}
}
}
それについて何か悪いことはありますか?