2023年7月19日发(作者:)
WinForm、WPF、窗⼝⽣命周期做了这么久桌⾯应⽤程序开发,对窗⼝的⽣命周期还没有⼀个清晰的了解。那我们就对*WinForm、WPF和*应⽤程序中窗⼝的⽣命周期做⼀个测试,看⼀下在窗⼝的创建和消亡的过程中,各个事件的执⾏顺序。WinForm⾸先,我们来看⼀下WinForm窗⼝。 在窗⼝的构造函数中注册⼀下各个事件。Created += Form1_HandleCreated;gContextChanged +=Form1_BindingContextChanged; += Form1_Load;eChanged += Form1_VisibleChanged;ted += Form1_Activated;vate += Form1_Deactivate; += Form1_Shown;osing += Form1_FormClosing; osed += Form1_FormClosed; vate += Form1_Deactivate;在事件中执⾏函数,将事件名称和执⾏顺序输出。private void Output(string func){ ine($"{func}: {i++}");}我们可以看到,输出结果是: > HandleCreated: 1 BindingContextChanged: 2 Load: 3 VisibleChanged: 4 Activated: 5 Shown: 6Deactivate: 7 Activated: 8 Deactivate: 9 Activated: 10 FormClosing: 11 FormClosed: 12 Deactivate: 13 当窗⼝失去焦点时,Deactivate事件被调⽤;获得焦点时,Activated事件被调⽤。 ———-WPF接下来,看⼀下WPF窗⼝。 同样,我们注册⼀下各个事件。lized += MainWindow_Initialized;ted += MainWindow_Activated; += MainWindow_Loaded;tRendered += MainWindow_ContentRendered;g += MainWindow_Closing;ed += MainWindow_Unloaded; += MainWindow_Closed;在各个事件中执⾏函数,输出事件名称和执⾏顺序。
输出结果如下:Initialized: 1
Activated: 2
Loaded: 3
ContentRendered: 4
Activated: 5
Closing: 6
Closed: 7值得注意的是:Initialized事件必须在构造函数执⾏InitializeComponent();之前注册,否则不会执⾏。
最后是窗⼝。PreInit==>Init==>InitComplete==>PreLoad==>Load==>Validation==>LoadComplete==>PreRender==>SaveStateComplete==>Rendering==>UnLoad
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689720465a280869.html
评论列表(0条)