我正在創建系統托盤應用程序。在初始化應用程序,我想:Windows窗體:啓動時,加載但隱藏表格
- 初始化,所以它在後臺
- 運行加載一個形式,而是保持隱蔽的形式(直到用戶doubleclicks托盤圖標)
它非常重要,因爲表單包含一個嵌入式瀏覽器,它將初始化Web套接字連接以接收數據,因此表單將在後臺加載並運行。但它需要隱藏。我試圖通過使用表格的Visible
屬性來解決這個問題。到目前爲止,我有這個(僅顯示相關的代碼):
public TrayApp()
{
var ni = new NotifyIcon();
InitializeForm();
ni.DoubleClick += this.ShowForm;
}
private void InitializeForm()
{
//load the form in the background so it can start receiving incoming data, but don't actually show the form
myForm = new MyForm();
myForm.Show();
myForm.Visible = false;
}
private void ShowForm(object sender, EventArgs e)
{
myForm.Visible = true;
}
這工作得很好,除了一個小細節:在啓動應用程序,我簡要地看到形式閃爍之前,它是隱藏的。我想Show
方法還將Visible
標誌設置爲true
,導致閃光發生。
其他的事情我試過,基於評論:
- 不要叫
myForm.Show()
,只有初始化的形式。這避免了閃光燈,但不會加載瀏覽器,因此WebSocket連接尚未初始化 - 做
myForm.Hide()
:如以前 - 集
Opacity
效果相同0
調用Show()
之前和設置Visible
到false
後,將其設置爲1
:這實際上工作,但我希望有一個更清潔的解決方案
如何避免閃光,並保持窗體運行,但隱藏?
如果您調用'Show'或'ShowDialog',則已經太遲而無法隱藏。你不能避免調用這些方法嗎?在模型中使用抽象:創建在後臺運行的模型,然後可以隨時創建視圖(甚至是多視圖)並將其附加到模型以查看累積或拍攝狀態。在MVVM之後,將套接字通信放在Form中感覺非常不對。 – Sinatr
try myform.Hide(); –
在你的初始化表單中,只是不做「隱藏它」後面的「顯示」,它已經存在,一旦你完成了新的MyForm()..除非你有一些觸發代碼int show - 你可以運行..不顯示錶單當然 – BugFinder