程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中登錄窗體和迎接窗體封閉辦法剖析

C#中登錄窗體和迎接窗體封閉辦法剖析

編輯:C#入門知識

C#中登錄窗體和迎接窗體封閉辦法剖析。本站提示廣大學習愛好者:(C#中登錄窗體和迎接窗體封閉辦法剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中登錄窗體和迎接窗體封閉辦法剖析正文


本文實例剖析了C#中登錄窗體和迎接窗體封閉辦法。分享給年夜家供年夜家參考。詳細剖析以下:

在c#的winform編程中,我們常常會做登錄窗體或迎接窗體,並把他們作為啟動窗體。
 
然則,我們有能夠會碰到一些成績。
 
請看上面的代碼:
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    new Form2().Show();
}
這段代碼想讓form1中的button1在點擊後封閉form1,show出form2,然則目標沒有到達,form2是show出來了,但僅僅是一閃,便和封閉的form1一同消逝了。
 
這是怎樣回事呢?讓我們從,Main辦法裡找謎底。這是主動生成的Main辦法:
static void Main()
{
    Application.EnableVisualStyles();//啟用可視款式
    Application.SetCompatibleTextRenderingDefault(false);//將某些控件的UseCompatibleTextRendering設為默許值
    Application.Run(new Form1());//這是症結
}
我們看到這一句
Application.Run(new Form1());
這是甚麼意思呢?這是要在沒有窗體的情形下,在以後線程上開端運轉尺度運用法式新聞輪回,並顯示這個窗體。
 
也就是說,要在一個沒有窗體的線程上顯示一個窗體,使這個線程不停止。
 
回過去,在button1的點擊事宜中,我們show出來的form2又是甚麼情形呢?這個form2是存活在一個新的線程上的,所以這兩個窗體才不會互相壅塞。
 
那末成績來了,為何把form1關失落,form2也會關失落呢?
 
緣由是,form2地點的線程,是show它的線程的從屬線程,在這裡就是說,form2的線程屬於form1的線程。在form1封閉的時刻,form1地點的線程也就停止,連帶著,就把他的一切從屬線程也都停止失落了,form2地點的線程天然也不破例,所以form2也會隨之封閉。
 
曉得了緣由,那末我們就來思慮處理的計劃。Application.Run();似乎很牛的模樣,我們來嘗嘗它行不可。
 
轉變後的button1代碼以下:
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    Application.Run(new Form2());
}
可是運轉成果是報錯

這是怎樣回事呢?這是由於在form1地點的線程上曾經運轉著一個form了,運轉著尺度運用法式新聞輪回,所以就不克不及在這個線程上再開啟一個新輪回,顯示一個新form了。
 
既然這個線程不克不及再來個form了,那我們就換個線程嘗嘗!終究的button1的點擊事宜代碼以下
private void button1_Click(object sender, EventArgs e)
{
    this.Close();

    new System.Threading.Thread(() =>
    {
 Application.Run(new Form2());

    }).Start();
}

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved