日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF中实现先登录后启动主程序的方法

發布時間:2025/4/14 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF中实现先登录后启动主程序的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我覺得先登錄后啟動應用主程序是一個很經典的問題,基本上如果要寫一個應用程序都會用到這個的小環節。我在這個問題上掙扎了大半天才找到解決方案,我的實現方法我覺得有點不正宗,如果有哪位高手知道更好的方法歡迎留言指導!!

首先來說一下傳統C#WinForm中的實現方法,基本上是在Main函數中根據第一個啟動窗口的DialogResult來判斷是否實例第二個窗口,DialogResult是在第一個窗口中根據登錄情況來設置的。代碼如下

主函數代碼:

static class Program

{

??? [STAThread]

??? static void Main()

??? {

??????? try

??????? {

??????????? Application.EnableVisualStyles();

??????????? Application.SetCompatibleTextRenderingDefault(false);

??????????? frmLogin frm = new frmLogin(); //登錄

??????????? if (frm.ShowDialog() == DialogResult.OK)

??????????? {

??????????????? Application.Run(new frmMain()); //主窗體

??????????? }

??????????? else

??????????? {

??????????????? Application.Exit();

??????????? }

??????? }

??????? catch (Exception ex)

??????? {

??????????? MessageBox.Show(ex.Message, "系統登陸", MessageBoxButtons.OK, MessageBoxIcon.Stop);

??????????? Application.Exit();

??????? }

??? }

}

第一個登錄窗口中設置DialogResult的代碼:

this.DialogResult = DialogResult.OK;

this.Close();

From: http://www.itc8.cn/a/bianchengleyuan/2011/0126/216.html

參考WinFrom中的這個基本想法,在WPF中實現。我重寫了OnStartup函數:

protected override void OnStartup(StartupEventArgs e)

??????? {

??????????? base.OnStartup(e);

?

??????????? Login loginWindow = new Login();

??????????? loginWindow.ShowDialog();

??????????? result = loginWindow.DialogResult;

??????????? username = loginWindow.UserName;

??????????? if (true == result)

??????????? {

??????????????? MainWindow main = new MainWindow(username);

??????????????? main.ShowDialog();

??????????? }

??????????

??????? } //這里需要注意的一點就是上面要用ShowDialog(),而不能直接調用Show(),Show()是不會返回任何結果的,只有用ShowDialog()才能渠道DialogResult

?

死活都是只能啟動第一個窗口登錄,然后第二個窗口無法呈現出來。調試后發現main窗口已經實例化了但是ShowDialog()貌似完全不起作用。糾結了。。

這個問題的可能原因有:

1.?????? MainWindow也就是我要創建的第二個主窗口沒有實例化成功;

2.?????? DialogResult錯誤導致沒有進入MainWindow的實例和顯示過程;

3.?????? 第一個窗口在作祟。

經過調試排除第一、二中可能,那么肯定就是第一個窗口設置不對或者哪里出問題了。Google了一下別人WPF的方法,發現有一篇文章中提到了需要將WPFShutDownMode設置為OnExplicitShutdown才行,試了一下,果然生效了!只需要很簡單的在Main主函數修改ApplicationShutdownMode,修改代碼如下

public static void Main()

??????? {

??????????? PFM.GUI.App.App app = new PFM.GUI.App.App();

??????????? app.ShutdownMode = ShutdownMode.OnExplicitShutdown;

??????????? app.Run();

??????? }

讓我們來看看這個ShutdownMode是何方神圣。ShutdownMode可以設置為一個ShutdownMode 枚舉值,包括三種:OnLastWindowCloseOnMainWindowCloseOnExplicitShutdown,默認值是OnLastWindowClose。如果將 ShutdownMode 設置為 OnLastWindowClose,則 Windows Presentation Foundation (WPF) 會在應用程序中的最后一個窗口關閉時隱式調用 Shutdown,即使任何當前已經實例化的窗口被設置為主窗口也是如此(MSDN: http://goo.gl/fAyrD ?)最后一句是關鍵:即使任何當前已經實例化的窗口被設置為主窗口也是如此。因為WPF中默認將在Application中實例化的第一個 Window 對象的引用自動設置為 MainWindow

也就是說當我們實例化第一個窗口的時候,它被認為是一個MainWindow,所以當它被關閉的時侯WPF就已經隱式調用了ShutDown所以之后我們在怎么實例化窗口都是徒勞。這就是為什么把ShutdownMode設為顯示關閉這樣就可以避免上面的問題了。需要注意的是在OnStartUp中記得調用App.Shutdown()來關閉Application哦。

轉載于:https://www.cnblogs.com/imjustice/archive/2011/05/08/2198114.html

總結

以上是生活随笔為你收集整理的WPF中实现先登录后启动主程序的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。