Application.SessionEnding 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当用户通过注销或关闭操作系统来结束 Windows 会话时发生。
public:
event System::Windows::SessionEndingCancelEventHandler ^ SessionEnding;
public event System.Windows.SessionEndingCancelEventHandler SessionEnding;
member this.SessionEnding : System.Windows.SessionEndingCancelEventHandler
Public Custom Event SessionEnding As SessionEndingCancelEventHandler
事件类型
示例
以下示例演示如何处理事件 SessionEnding 并允许用户取消该事件。
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
SessionEnding="App_SessionEnding" />
using System.Windows;
namespace SDKSample
{
public partial class App : Application
{
void App_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
// Ask the user if they want to allow the session to end
string msg = string.Format("{0}. End session?", e.ReasonSessionEnding);
MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo);
// End session, if specified
if (result == MessageBoxResult.No)
{
e.Cancel = true;
}
}
}
}
Imports System.Windows
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_SessionEnding(ByVal sender As Object, ByVal e As SessionEndingCancelEventArgs)
' Ask the user if they want to allow the session to end
Dim msg As String = String.Format("{0}. End session?", e.ReasonSessionEnding)
Dim result As MessageBoxResult = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo)
' End session, if specified
If result = MessageBoxResult.No Then
e.Cancel = True
End If
End Sub
End Class
End Namespace
注解
默认情况下,应用程序在 Windows 会话结束时关闭,当用户注销或关闭时发生。 发生这种情况时,Windows 会要求关闭每个打开的应用程序。 但是,发生这种情况时,应用程序可能尚未准备好关闭。 例如,应用程序的数据可能处于不一致状态,或者处于长时间运行的操作的中间。 在这些情况下,阻止会话结束可能是可取的,并且更可取的做法是允许用户选择是否允许会话结束。
可以通过处理 SessionEnding 事件来检测会话何时结束。 如果应用程序需要阻止会话结束, SessionEndingCancelEventArgs 则传递给事件处理程序的参数会 Cancel 公开设置为 true
(默认值为 false
) 。
如果 SessionEnding 未处理,或者未取消处理, Shutdown 则调用 并 Exit 引发 事件。
若要获取有关会话结束原因的详细信息,应用程序可以检查 ReasonSessionEnding,这是 (和ReasonSessionEnding.Shutdown) ReasonSessionEnding.Logoff值之一ReasonSessionEnding。
SessionEnding 不会由控制台应用程序引发。
SessionEnding 仅在创建 Application 对象的线程上引发。
SessionEnding 不会引发 XAML 浏览器应用程序 (XBAP) 。