欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中登錄窗體和歡迎窗體關(guān)閉方法分析

 更新時(shí)間:2014年12月15日 15:39:49   投稿:shichen2014  
這篇文章主要介紹了C#中登錄窗體和歡迎窗體關(guān)閉方法,實(shí)例分析了C#中登錄窗體和歡迎窗體關(guān)閉時(shí)出現(xiàn)錯(cuò)誤的原因與解決方法,是C#項(xiàng)目開發(fā)中非常實(shí)用的技巧,需要的朋友可以參考下

本文實(shí)例分析了C#中登錄窗體和歡迎窗體關(guān)閉方法。分享給大家供大家參考。具體分析如下:

在c#的winform編程中,我們經(jīng)常會(huì)做登錄窗體或歡迎窗體,并把他們作為啟動(dòng)窗體。
 
但是,我們有可能會(huì)遇到一些問(wèn)題。
 
請(qǐng)看下面的代碼:

復(fù)制代碼 代碼如下:
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    new Form2().Show();
}

這段代碼想讓form1中的button1在點(diǎn)擊后關(guān)閉form1,show出form2,但是目的沒(méi)有達(dá)到,form2是show出來(lái)了,但僅僅是一閃,便和關(guān)閉的form1一同消失了。
 
這是怎么回事呢?讓我們從,Main方法里找答案。這是自動(dòng)生成的Main方法:
復(fù)制代碼 代碼如下:
static void Main()
{
    Application.EnableVisualStyles();//啟用可視樣式
    Application.SetCompatibleTextRenderingDefault(false);//將某些控件的UseCompatibleTextRendering設(shè)為默認(rèn)值
    Application.Run(new Form1());//這是關(guān)鍵
}

我們看到這一句
復(fù)制代碼 代碼如下:
Application.Run(new Form1());

這是什么意思呢?這是要在沒(méi)有窗體的情況下,在當(dāng)前線程上開始運(yùn)行標(biāo)準(zhǔn)應(yīng)用程序消息循環(huán),并顯示這個(gè)窗體。
 
也就是說(shuō),要在一個(gè)沒(méi)有窗體的線程上顯示一個(gè)窗體,使這個(gè)線程不結(jié)束。
 
回過(guò)來(lái),在button1的點(diǎn)擊事件中,我們show出來(lái)的form2又是什么情況呢?這個(gè)form2是存活在一個(gè)新的線程上的,所以這兩個(gè)窗體才不會(huì)相互阻塞。
 
那么問(wèn)題來(lái)了,為什么把form1關(guān)掉,form2也會(huì)關(guān)掉呢?
 
原因是,form2所在的線程,是show它的線程的附屬線程,在這里就是說(shuō),form2的線程屬于form1的線程。在form1關(guān)閉的時(shí)候,form1所在的線程也就結(jié)束,連帶著,就把他的所有附屬線程也都結(jié)束掉了,form2所在的線程自然也不例外,所以form2也會(huì)隨之關(guān)閉。
 
知道了原因,那么我們就來(lái)思考解決的方案。Application.Run();好像很牛的樣子,我們來(lái)試試它行不行。
 
改變后的button1代碼如下:
復(fù)制代碼 代碼如下:
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    Application.Run(new Form2());
}

可是運(yùn)行結(jié)果是報(bào)錯(cuò)

這是怎么回事呢?這是因?yàn)樵趂orm1所在的線程上已經(jīng)運(yùn)行著一個(gè)form了,運(yùn)行著標(biāo)準(zhǔn)應(yīng)用程序消息循環(huán),所以就不能在這個(gè)線程上再開啟一個(gè)新循環(huán),顯示一個(gè)新form了。
 
既然這個(gè)線程不能再來(lái)個(gè)form了,那我們就換個(gè)線程試試!最終的button1的點(diǎn)擊事件代碼如下

復(fù)制代碼 代碼如下:
private void button1_Click(object sender, EventArgs e)
{
    this.Close();

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

    }).Start();
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#實(shí)現(xiàn)提取Word中插入的多媒體文件(視頻,音頻)

    C#實(shí)現(xiàn)提取Word中插入的多媒體文件(視頻,音頻)

    在Word中可將文件通過(guò)OLE對(duì)象嵌入的方式插入到文檔,包括Word、excel、PDF、PPT、圖片、宏文件、文件包等在內(nèi)的多種文件類型。本文將利用C#實(shí)現(xiàn)提取插入在Word文件中的這些多媒體文件,感興趣的可以了解一下
    2022-02-02
  • C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二)

    C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二)

    這篇文章主要介紹了C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二),本文講解了internal與protected、private、enum、string的==、傳引用等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • c# 類成員的可訪問(wèn)性代碼詳解

    c# 類成員的可訪問(wèn)性代碼詳解

    在本篇文章里小編給大家整理了關(guān)于c# 類成員的可訪問(wèn)性代碼詳解內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • C#方法的總結(jié)詳解

    C#方法的總結(jié)詳解

    本篇文章是對(duì)C#方法進(jìn)行了詳細(xì)的總結(jié)與介紹,需要的朋友參考下
    2013-05-05
  • 利用C#實(shí)現(xiàn)修改圖片透明度功能

    利用C#實(shí)現(xiàn)修改圖片透明度功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)修改圖片透明度功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • 你了解C#的協(xié)變和逆變嗎,看完這篇就懂了

    你了解C#的協(xié)變和逆變嗎,看完這篇就懂了

    這篇文章主要介紹了你了解C#的協(xié)變和逆變嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#中StringBuilder類的使用總結(jié)

    C#中StringBuilder類的使用總結(jié)

    本篇文章主要是對(duì)C#中StringBuilder類的使用方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C#實(shí)現(xiàn)循環(huán)發(fā)送電腦屏幕截圖

    C#實(shí)現(xiàn)循環(huán)發(fā)送電腦屏幕截圖

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)循環(huán)發(fā)送電腦屏幕截圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 一文帶你深入了解C#中的特殊字符

    一文帶你深入了解C#中的特殊字符

    特殊字符是預(yù)定義的上下文字符,用于修飾最前面插入了此類字符的程序元素,C#支持以下特殊字符:@和$,本文將通過(guò)代碼示例帶大家深入了解C#中的特殊字符,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-01-01
  • C#泛型詳解

    C#泛型詳解

    本文詳細(xì)講解了C#中的泛型,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論