2 回答

TA貢獻1804條經驗 獲得超8個贊
調用Application.Run()會導致新的應用程序消息循環開始在當前線程上運行。Application.Run()如果在第一個應用程序運行時進行后續調用,則InvalidOperationException根據docs拋出一個。但是,在您的情況下這實際上是不可能的,因為您的調用Application.Run()是在 UI 線程上調用的,這會阻止任何后續代碼的執行,直到它退出。
相反,我們需要通過使用來引導應用程序Application.Run(new Main()),然后在Main表單內部我們將處理顯示和隱藏行為。
以下是我建議如何實現這一目標:
首先,在您的Main方法中,將所有內容替換為Application.Run(new Main());.
然后在您的Main表單內部創建一個如下所示的方法:
private void Main_Shown(Object sender, EventArgs e)
{
Task.WaitAll(Task.Delay(500));
this.Hide();
var menuForm = new MForm();
menuForm.Closed += (obj, args) => { this.Show(); };
menuForm.Show();
}
最后,進入您的Main.Designer.cs文件并確保將Shown事件訂閱到Main_Shown您剛剛在方法中創建的InitializeComponent方法,如下所示:
this.Shown += new System.EventHandler(this.Main_Shown);
解釋這里發生了什么:
根據文檔,Form.Shown第一次向用戶顯示表單時會觸發事件。這對于這個用例來說是完美的,所以我們“掛鉤”它并通過等待 500 毫秒的延遲來響應它。
之后我們隱藏當前的 ( Main) 表單,創建新的 ( MForm) 表單并顯示它。但更重要的細節是我們訂閱了該表單的Closed事件,以便當用戶關閉它時,該Main表單會再次顯示。

TA貢獻1796條經驗 獲得超7個贊
使用計時器在 Firstform 中打開 Second form,并在顯示 Secondform 后隱藏 Firstform。
像這樣。
主要的
static void Main()
{
Form StartForm = new Main();
Application.Run(StartForm);
}
第一形式
設置間隔為 5000 的計時器并啟用它。
private void timer1_Tick(object sender, EventArgs e)
{
MForm MenuForm = new MForm();
this.Hide();
MenuForm.Show();
timer1.Stop();
}
- 2 回答
- 0 關注
- 144 瀏覽
添加回答
舉報