Uygulama Yönetimine Genel Bakış
Bu konuda genel bir bakış sağlar Windows Presentation Foundation (WPF) Hizmetleri oluşturma ve yönetme uygulamaları. Çekirdek, bir WPF uygulaması Application sınıfı, çeşitli desteklertemel uygulama Hizmetleri. Bu konuda en önemli giriş sağlar bu hizmetleri.
Bu konu aşağıdaki bölümleri içerir.
- The Application Class
- Uygulama tanımı
- Geçerli uygulama alma
- Uygulama süresi
- Diğer uygulama Hizmetleri
- İlgili Konular
The Application Class
Bir uygulama da dahil olmak üzere birçok uygulamaya özgü öğelerden oluşan user interface (UI), iş mantığı, veri erişim mantığı, denetimler ve veri. Bu öğeler, genellikle bir uygulamadan diğerine farklılık gösterir. Ancak, tüm uygulamalar uygulama uygulamasını ve yönetimini kolaylaştıran işlevsellik kümesini paylaşan eğilimindedir. De WPF, bu ortak uygulama kapsamlı işlevsellik ile kapsüllenir Application aşağıdaki hizmetleri sağlayan bir sınıf:
Oluşturma ve ortak uygulama altyapısının yönetme.
İzleme ve uygulama süresi ile etkileşim.
Alma ve komut satırı parametrelerini işleme.
Uygulama kapsamlı özellikler ve kaynakların paylaşımı.
Algılama ve işlenemeyen özel yanıt.
Çıkış kodlarını döndürülüyor.
Tek başına çalışan uygulamaları Windows'ta yönetme (bkz: WPF Windows Genel Bakış).
İzleme ve yönetme gezinti (bkz: Gezintiye Genel Bakış).
Uygulamanızda bu hizmetleri kullanmak için kullanmanız gerekir Application sınıfına uygulayan bir uygulama tanımı.
Uygulama tanımı
A WPF uygulama tanımı, türetilmiş bir sınıf olan Application ve bir özel yapılandırılmış Microsoft build engine (MSBuild) ayarı.
Uygulama tanımı uygulama
Normal bir WPF uygulama tanımı, biçimlendirme ve kod kullanılarak gerçekleştirilir-arkada. Böylece biçimlendirme hazırlanmasına kaynakları, uygulama özelliklerini ayarlama ve olayları işleme ve uygulamaya özgü davranış arkadaki kod uygulama sırasında olayları kaydetmek için kullanın.
Aşağıdaki örnek, biçimlendirme ve arkadaki kod kullanarak uygulama tanımı nasıl gösterir:
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App" />
Imports Microsoft.VisualBasic
Imports System.Windows ' Application
Namespace SDKSample
Partial Public Class App
Inherits Application
End Class
End Namespace
using System.Windows; // Application
namespace SDKSample
{
public partial class App : Application { }
}
Biçimlendirme dosyası ve arka planda dosya birlikte çalışmak için aşağıdaki izin vermek için gerçekleşmesi gerekir:
İşaretleme, de Application öğesi içermelidir x:Class özniteliği. Ne zaman uygulama üretilmiştir, varlığını x:Class biçimleme dosyası neden olan MSBuild oluşturmak için bir partial , türetir sınıfı Application ve tarafından belirtilen ada sahip x:Class özniteliği. Bu eklenmesini gerektirir bir XML ad alanı bildirimi için XAML şema (xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml").
Arkadaki kod içinde sınıf olmalıdır bir partial sınıfı tarafından belirtilen adda x:Class öznitelik biçimlendirme içinde ve gerekir türetmek Application. Böylece, arka planda dosya ile ilişkili partial uygulama oluþturulurken biçimleme dosyası için oluşturulan sınıf (bkz: WPF Uygulaması Oluşturma (WPF)).
![]() |
---|
Yeni wpf uygulama proje veya proje wpf tarayıcı uygulamasını kullanarak oluşturduğunuzda Microsoft Visual Studio, uygulama tanımını varsayılan olarak eklenir ve işaretleme ve kod kullanılarak tanımlanır-arkada. |
Bu kod, uygulama tanımı uygulamak için gereken en düşük üyeliktir. Ancak, ek bir MSBuild oluşturma ve çalıştırma önce uygulama tanımı yapılan yapılandırma gerekiyoruygulamayı.
MSBuild uygulama tanımı yapılandırma
Tek başına çalışan uygulamaları ve XAML browser applications (XBAPs) gerektiren uygulaması belirli bir düzeyde altyapı önce yapabilir çalışma. Bu altyapı en önemli parçası giriş noktasıdır. Bir uygulama bir kullanıcı tarafından başlatıldığında işletim sistemi uygulamaları başlatmak için tanınmış bir işlevi giriş noktası çağırır.
Geleneksel olarak, geliştiriciler bu kodu bir kısmını veya tamamını kendileri için bağlı teknoloji yazmanız gerekirdi. Ancak, WPF sizin uygulama tanımının biçimlendirme dosyası olarak yapılandırıldığında, bu kodu sizin için oluşturur bir MSBuild ApplicationDefinition Madde, aşağıda gösterildiği gibi MSBuild Proje dosyası:
<Project
DefaultTargets="Build"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
...
<ApplicationDefinition Include="App.xaml" />
<Compile Include="App.xaml.cs" />
...
</Project>
Arka planda dosya kodu içerdiğinden, onu olarak işaretlenmiş bir MSBuild Compile Madde, gibi olan normal.
Bu uygulama MSBuild yapılandırmalarını uygulama tanımını işaretleme ve arkadaki kod dosyaları için neden olan MSBuild aşağıdaki gibi bir kod üretmek için:
Imports Microsoft.VisualBasic
Imports System ' STAThread
Imports System.Windows ' Application
Namespace SDKSample
Public Class App
Inherits Application
Public Sub New()
End Sub
<STAThread>
Public Shared Sub Main()
' Create new instance of application subclass
Dim app As New App()
' Code to register events and set properties that were
' defined in XAML in the application definition
app.InitializeComponent()
' Start running the application
app.Run()
End Sub
Public Sub InitializeComponent()
...
End Sub
End Class
End Namespace
using System; // STAThread
using System.Windows; // Application
namespace SDKSample
{
public class App : Application
{
public App() { }
[STAThread]
public static void Main()
{
// Create new instance of application subclass
App app = new App();
// Code to register events and set properties that were
// defined in XAML in the application definition
app.InitializeComponent();
// Start running the application
app.Run();
}
public void InitializeComponent()
{
...
}
}
}
Sonuç kodunu uygulama tanımınızı girdi noktası yöntemi içeren ek altyapı kodu, augments Main. STAThreadAttribute Özniteliği uygulanan Main belirtmek için yöntem ana UI için iş parçacığı WPF uygulamadır bir sta iş parçacığı, kendisi için gerekli WPF uygulamaları. Çağrıldığında, Main Yeni bir örneğini oluşturur App önce edinilecek InitializeComponent olayları kaydetme ve biçimlendirme uygulanan özelliklerini ayarlama yöntemi Çünkü InitializeComponent üretilir, açıkça çağırmak gerekmeyen InitializeComponent gibi yapmak bir uygulama tanımından Page ve Window uygulamaları. Son olarak, Run yöntemi çağrılır başlatılacak uygulama.
Geçerli uygulama alma
Çünkü, hizmetlerini Application sınıf uygulama arasında paylaşılan, tek bir örneği olabilir Application her sınıfı AppDomain. Bu, zorlamak için Application sınıfı bir singleton sınıf olarak uygulanmış (bkz: C# uygulama Singleton), kendisini tek bir örneğini oluşturur ve sunar paylaşılan erişimi ile static Current özelliği.
Aşağıdaki kod, bir başvuru almaya gösterilmiştir Application nesne için geçerli AppDomain.
' Get current application
Dim current As Application = App.Current
// Get current application
Application current = App.Current;
Currentörneği için bir başvuru verir Application sınıfa Başvuru istiyorsanız sizin Application türetilmiş sınıf değeri artığını gerekir Current özelliği, gösterildiği gibi aşağıdaki örnek.
' Get strongly-typed current application
Dim appCurrent As App = CType(App.Current, App)
// Get strongly-typed current application
App app = (App)App.Current;
Değerinin inceleyebilirsiniz Current süresi içinde herhangi bir noktada bir Application nesne. Ancak, dikkatli olmalısınız. Sonra Application sınıf örneği, bir süre durumu Application nesne tutarsız. Bu dönem Application işlemi uyguluyor kodunuzu çalıştırmak, gerekli olan çeşitli başlatma görevleri dahil uygulama altyapısı kurma, Özellikler, ayarlama ve kaydetme olayları. Kullanmaya çalışırsanız Application kodunuz olabilir bu dönemde nesne beklenmeyen sonuçlar, özellikle çeşitli bağlıdır, Application özellikleri olan kümesi.
Zaman Application başlatma işini tamamlayan yaşam gerçekten başlar.
Uygulama süresi
Yaşam bir WPF uygulaması, çeşitli olaylar tarafından oluşturuldu olarak işaretlenmiş Application uygulamanız ne zaman başladı, size bildirmek için etkinleştirilmiş ve etkinliği ve kapatmak aşağı.
Bu bölüm aşağıdaki alt bölümleri içerir.
- Giriş ekranı
- Uygulama başlatma
- Kullanıcı arabiriminde gösterme
- Komut satırı bağımsız değişkenleri işleme
- Uygulama etkinleştirme ve devreden çıkarma
- Uygulamayı kapatma
- İşlenmeyen özel durum
- Uygulama yaşam olayları
Giriş ekranı
Başlangıç .NET Framework 3.5 SP1, başlangıç penceresinde kullanılacak görüntü belirtebilirsiniz veya giriş ekranı. SplashScreen Sınıf kolaylaştırır görüntülemek bir başlangıç penceresindeyken uygulamanız olduğu yükleniyor. SplashScreen Penceresinde oluşturulur ve önce gösterilen Run denir. Daha fazla bilgi için Uygulama Başlangıç Zamanı ve Nasıl Yapılır: WPF Uygulamasına Karşılama Ekranı Ekleme.
Uygulama başlatma
Sonra Run olarak adlandırılır ve uygulamayı başlattı, uygulama çalıştır. hazır Bu süre ne zaman değeriyle Startup olay ortaya:
Imports Microsoft.VisualBasic
Imports System.Windows ' Application, StartupEventArgs, WindowState
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
' Application is running
...
End Sub
End Class
End Namespace
using System.Windows; // Application, StartupEventArgs, WindowState
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Application is running
...
}
}
}
Bu noktada göstermek için yapılacak en yaygın şey bir uygulamanın işleyişi içinde değil bir UI.
Kullanıcı arabiriminde gösterme
Çoğu tek başına Windows uygulamalarını bir Window zaman onlar başlamak çalışmaktadır. Startup Olay işleyicisi olan bir konumda hangi yapabilirsiniz Bu, aşağıdaki kodu. gösterildiği gibi
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="App_Startup" />
Imports Microsoft.VisualBasic
Imports System.Windows ' Application, StartupEventArgs
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
' Open a window
Dim window As New MainWindow()
window.Show()
End Sub
End Class
End Namespace
using System.Windows; // Application, StartupEventArgs
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Open a window
MainWindow window = new MainWindow();
window.Show();
}
}
}
![]() |
---|
İlk Window tek başına bir örneği için uygulama haline gelir, ana uygulama penceresine göre varsayılan.Bu Window nesne tarafından başvuruda Application.MainWindow özelliği.Değeri MainWindow özelliği değiştirilebilir programla farklı bir pencereye, daha ilk örneği Window olması gereken ana penceresi. |
Zaman bir XBAP ilk başladığında onu büyük olasılıkla gitmek için bir Page. Bu, aşağıdaki kodu gösterilir.
<Application
x:Class="SDKSample.App"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Startup="App_Startup" />
Imports System ' Uri, UriKind, EventArgs, Console
Imports System.Windows ' Application, StartupEventArgs
Imports System.Windows.Navigation ' NavigationWindow
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
CType(Me.MainWindow, NavigationWindow).Navigate(New Uri("HomePage.xaml", UriKind.Relative))
End Sub
End Class
End Namespace
using System; // Uri, UriKind, EventArgs, Console
using System.Windows; // Application, StartupEventArgs
using System.Windows.Navigation; // NavigationWindow
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
((NavigationWindow)this.MainWindow).Navigate(new Uri("HomePage.xaml", UriKind.Relative));
}
}
}
İşlerseniz, Startup yalnızca açmak için bir Window ya da gidin bir Page, ayarlayabileceğiniz StartupUri işaretlemeyi yerine öznitelik.
Aşağıdaki örnek, nasıl kullanılacağını gösterir StartupUri açmak için tek başına uygulamasından bir Window.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="MainWindow.xaml" />
Aşağıdaki örnek, nasıl kullanılacağını gösterir StartupUri gelen bir XBAP gitmek için bir Page.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="HomePage.xaml" />
Bu biçimlendirme bir pencere açmak için önceki kod aynı etkiye sahiptir.
![]() |
---|
Gezinme hakkında daha fazla bilgi için bkz: Gezintiye Genel Bakış. |
Ele alması gereken Startup açmak için olay bir Window varsayılan olmayan bir oluşturucu kullanarak oluşturmak gereksinim duyduğunuz, özelliklerini ayarlamak veya göstermeden önce olaylara abone yapmanız veya uygulama başlatıldığında, sağlanan komut satırı değişkenlerini işlemek gereken,.
Komut satırı bağımsız değişkenleri işleme
De Windows, tek başına çalışan uygulamaları, bir komut istemi veya başlatılabilirMasaüstü. Her iki durumda da, komut satırı değişkenleri uygulamaya geçirilebilir. Aşağıdaki örnek, tek bir komut satırı değişkeni ile başlatılan uygulama gösterir "/ StartMinimized":
wpfapplication.exe /StartMinimized
Uygulama başlatma sırasında WPF komut satırı bağımsız değişkenleri işletim sisteminden alır ve onları geçen Startup olay işleyicisi aracılığıyla Args özelliği StartupEventArgs parametresi. Almak ve aşağıdaki gibi bir kod kullanarak komut satırı argümanları saklamak.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="App_Startup" />
Imports Microsoft.VisualBasic
Imports System.Windows ' Application, StartupEventArgs, WindowState
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
' Application is running
' Process command line args
Dim startMinimized As Boolean = False
Dim i As Integer = 0
Do While i <> e.Args.Length
If e.Args(i) = "/StartMinimized" Then
startMinimized = True
End If
i += 1
Loop
' Create main application window, starting minimized if specified
Dim mainWindow As New MainWindow()
If startMinimized Then
mainWindow.WindowState = WindowState.Minimized
End If
mainWindow.Show()
End Sub
End Class
End Namespace
using System.Windows; // Application, StartupEventArgs, WindowState
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Application is running
// Process command line args
bool startMinimized = false;
for (int i = 0; i != e.Args.Length; ++i)
{
if (e.Args[i] == "/StartMinimized")
{
startMinimized = true;
}
}
// Create main application window, starting minimized if specified
MainWindow mainWindow = new MainWindow();
if (startMinimized)
{
mainWindow.WindowState = WindowState.Minimized;
}
mainWindow.Show();
}
}
}
Kod tutamaçları Startup denetlemek için mi /StartMinimized komut satırı bağımsız değişkeni sağlanan; Bu nedenle, ana pencere ile açılırsa bir WindowState , Minimized. Çünkü dikkat WindowState özelliği ayarlanmalıdır programlı olarak ana Window açık bir biçimde kod açılmalıdır
XBAPsalamaz ve komut satırı bağımsız değişkeni kullanılarak başlatılan nedeniyle işlem ClickOnce dağıtım (bkz: Bir WPF Uygulamasının Dağıtılması (WPF)). Ancak, alma ve sorgu dizesi parametrelerinde bunları başlatmak için kullanılan URL'leri işleme.
Uygulama etkinleştirme ve devreden çıkarma
Windowsuygulamalar arasında geçiş yapmak kullanıcılara izin verir. En yaygın yolu, alt + SEKME tuş bileşimini kullanmaktır. Bir görünür varsa uygulama yalnızca olarak değiştirilebilir Window , bir kullanıcı için seçin. Seçili Window olan etkin pencere (olarak da bilinen ön pencere) ve Window , kullanıcı girişi alır. Etkin pencere ile uygulama etkin uygulamanın (veya ön plan uygulama). Bir uygulama aşağıdaki durumlarda etkin uygulama haline gelir:
Başlatılır ve gösterir bir Window.
Bir kullanıcı başka bir uygulamadan seçerek geçer bir Window uygulama.
Bir uygulama tarafından işleme etkin olduğunda tespit edebileceğiniz Application.Activated olay.
Benzer şekilde, bir uygulama aşağıdaki durumlarda devre dışı olabilir:
Bir kullanıcının geçerli diskten başka bir uygulamaya geçer.
Ne zaman uygulama kapanır.
Bir uygulama tarafından işleme etkin olmadığında tespit edebileceğiniz Application.Deactivated olay.
Aşağıdaki kod, nasıl işleneceğini gösterir Activated ve Deactivated olayları belirleme olup olmadığını bir uygulama olduğu etkin.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
Activated="App_Activated"
Deactivated="App_Deactivated" />
Imports Microsoft.VisualBasic
Imports System ' EventArgs
Imports System.Windows ' Application
Namespace SDKSample
Partial Public Class App
Inherits Application
Private isApplicationActive As Boolean
Private Sub App_Activated(ByVal sender As Object, ByVal e As EventArgs)
' Application activated
Me.isApplicationActive = True
End Sub
Private Sub App_Deactivated(ByVal sender As Object, ByVal e As EventArgs)
' Application deactivated
Me.isApplicationActive = False
End Sub
End Class
End Namespace
using System; // EventArgs
using System.Windows; // Application
namespace SDKSample
{
public partial class App : Application
{
bool isApplicationActive;
void App_Activated(object sender, EventArgs e)
{
// Application activated
this.isApplicationActive = true;
}
void App_Deactivated(object sender, EventArgs e)
{
// Application deactivated
this.isApplicationActive = false;
}
}
}
A Window de etkinliği ve etkinleştirilebilecek. Bkz: Window.Activated ve Window.Deactivated için daha fazla bilgi.
![]() |
---|
Ne Application.Activated ne de Application.Deactivated ortaya XBAPs. |
Uygulamayı kapatma
Bilgisayarı, aşağıdaki nedenlerle ortaya çıkabilir, bir uygulamanın ömrü sona erer:
Bir kullanıcı kapatır her Window.
Kullanıcı ana kapatır Window.
Bir kullanıcı sona Windows oturumu kapatmadan veya kapatma aşağı.
Bir uygulamaya özel koşulun yerine.
Uygulamayı kapatma yönetmenize yardımcı olmak için Application sağlayan Shutdown yöntemi, ShutdownMode özelliği ve SessionEnding ve Exit olayları.
![]() |
---|
Shutdownyalnızca sahip uygulamalardan çağrılabilir UIPermission.Tek başına WPF her zaman uygulamaları var. Bu izniAncak, XBAPs Internet bölgesi kısmi güven güvenlik sanal alanında çalışan yapmak değil. |
Kapatma modu
Çoğu uygulama, tüm windows kapatıldığında veya ana pencere kapatıldığında aşağı kapatın. Bazı durumlarda, ancak diğer uygulamaya özgü koşullar ne zaman bir uygulama kapanır belirleyebilir. Altında uygulama Bilgisayarı Kapat ayarlayarak koşulları belirtebilirsiniz ShutdownMode aşağıdakilerden biriyle ShutdownMode numaralandırma değerleri:
Varsayılan değer olan ShutdownMode olan OnLastWindowClose, başka bir deyişle, uygulama otomatik olarak kapatır zaman son uygulama penceresinde kapalı kullanıcı. Ancak, uygulamanız kapatılmalıdır, ne zaman ana pencere kapatıldı, WPF otomatik olarak mı, yoksa ayarladığınız ShutdownMode için OnMainWindowClose. This is shown in the following example.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
ShutdownMode="OnMainWindowClose" />
Uygulamaya özgü kapatma koşulları varsa, ayarladığınız ShutdownMode için OnExplicitShutdown. Bu durumda, açıkça çağrılarak bir uygulamayı kapatmak için sizin sorumluluğunuzdur Shutdown yöntemi; Aksi halde, uygulamanızın tüm pencereleri kapalı olsa dahi devam edecektir. Dikkat Shutdown örtülü olarak ne zaman verilir ShutdownMode ya da OnLastWindowClose veya OnMainWindowClose.
![]() |
---|
ShutdownModedan ayarlanabilir bir XBAP, ancak yoksayılır; bir XBAP her zaman, onu uzağa bir tarayıcı veya tarayıcı barındıran görüntülendiği zaman kapatıldığında XBAP kapalı.For more information, see Gezintiye Genel Bakış. |
Oturumun bitiş
Tarafından açıklanan kapatma koşulları ShutdownMode özelliği, belirli bir uygulama. Bazı durumlarda, bir uygulama bir dış durum sonucu olarak kapanabilir. Bir kullanıcı sona erdiğinde en yaygın dış koşul ortaya Windows oturumu aşağıdaki eylemleri tarafından:
Oturum kapatma
Shutting down
Yeniden başlatma
Hazırda bekleme
Ne zaman algılamak için bir Windows tanıtıcı oturumu sona erer, SessionEnding olayı, aşağıdaki örnek. resimli olarak
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
SessionEnding="App_SessionEnding" />
Imports Microsoft.VisualBasic
Imports System.Windows ' Application, SessionEndingCancelEventArgs, MessageBox, MessageBoxResult, MessageBoxButton
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
using System.Windows; // Application, SessionEndingCancelEventArgs, MessageBox, MessageBoxResult, MessageBoxButton
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;
}
}
}
}
Bu örnekte, kodun inceler ReasonSessionEnding belirlemek için özellik nasıl Windows oturumdur bitiş. Kullanıcıya bir onaylama iletisi görüntülemek için bu değeri kullanır. Kullanıcı oturumu sonlandırmak isterseniz, kod ayarlar Cancel için true önlemek için Windows oturumdan bitiş.
![]() |
---|
SessionEndingiçin artırılıyor değil XBAPs. |
Exit
Uygulama kapatıldığında kalıcı uygulama durumu gibi bazı son işlem gerçekleştirmek gerekebilir. Bu gibi durumlarda işleyebilir Exit olay.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
Startup="App_Startup"
Exit="App_Exit">
...
</Application>
Imports System.IO ' StreamReader, FileMode
Imports System.IO.IsolatedStorage ' IsolatedStorageFile, IsolatedStorageFileStream
Namespace SDKSample
Partial Public Class App
Inherits Application
Private filename As String = "App.txt"
...
Private Sub App_Exit(ByVal sender As Object, ByVal e As ExitEventArgs)
' Persist application-scope property to isolated storage
Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForDomain()
Using stream As New IsolatedStorageFileStream(filename, FileMode.Create, storage)
Using writer As New StreamWriter(stream)
' Persist each application-scope property individually
For Each key As String In Me.Properties.Keys
writer.WriteLine("{0},{1}", key, Me.Properties(key))
Next key
End Using
End Using
End Sub
End Class
End Namespace
using System.Windows; // Application, StartupEventArgs
using System.IO; // StreamReader, FileMode
using System.IO.IsolatedStorage; // IsolatedStorageFile, IsolatedStorageFileStream
namespace SDKSample
{
public partial class App : Application
{
string filename = "App.txt";
...
private void App_Exit(object sender, ExitEventArgs e)
{
// Persist application-scope property to isolated storage
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filename, FileMode.Create, storage))
using (StreamWriter writer = new StreamWriter(stream))
{
// Persist each application-scope property individually
foreach (string key in this.Properties.Keys)
{
writer.WriteLine("{0},{1}", key, this.Properties[key]);
}
}
}
}
}
For the complete example, see Nasıl Yapılır: Uygulama Oturumları Arasında Uygulama Kapsamı Özelliklerini Koruma ve Geri Yükleme.
ExitHer iki bağımsız uygulamalar tarafından işlenebilir ve XBAPs. İçin XBAPs, Exit , aşağıdaki durumlarda ortaya çıkar:
Bir XBAP uzakta gidilen.
De Internet Explorer 7, ne zaman bulunduğu sekmeyi XBAP kapalı.
Tarayıcı kapatıldığında.
Exit Code
Uygulamalar genellikle bir kullanıcı isteğine yanıt olarak işletim sistemi tarafından başlatılırlar. Ancak, bir uygulama belirli bir görevi gerçekleştirmek için başka bir uygulama tarafından başlatılabilir. Başlatılan uygulama kapatıldığında başlatan uygulama altında başlatılan uygulama kapatma koşulu öğrenmek isteyebilirsiniz. Bu gibi durumlarda Windows uygulamaları kapatma uygulama çıkış kodu geri dönmek izin verir Varsayılan olarak, WPF uygulamaları dönmek bir çıkış kodu değeri 0.
![]() |
---|
Ne zaman ayıklamaya dan Visual Studio, uygulama çıkış kodu görüntülenir Çıkış uygulama, görünümler aşağıdakine benzer bir ileti kapatır, pencere: The program '[5340] AWPFApp.vshost.exe: Managed' has exited with code 0 (0x0). Açtığınız Çıkış tıklatarak pencereyi Çıkış üzerinde View menü. |
Çıkış kodunu değiştirmek için arayabileceğiniz Shutdown(Int32) tekrar, hangi çıkış kodu için bir tamsayı değişken kabul eder:
' Shutdown and return a non-default exit code
Application.Current.Shutdown(-1)
// Shutdown and return a non-default exit code
Application.Current.Shutdown(-1);
Çıkış kodu değerini algılayacak ve işleme göre değiştirmek, Exit olay. Exit Olay işleyicisine geçirilir bir ExitEventArgs Çıkış koduyla erişim sağlar ApplicationExitCode özelliği. For more information, see Exit.
![]() |
---|
Hem tek başına uygulamalarında çıkış kodu ayarlayabilirsiniz ve XBAPs.Ancak, çıkış kodu değeri için gözardı XBAPs. |
İşlenmeyen özel durum
Bazen bir uygulamanın ne zaman önceden tahmin edilemeyen bir özel durum gibi aşağı altında olağandışı koşullar, bilgisayarı. Bu durumda, uygulama algılamak ve özel durum işleme kodu olmayabilir. Bu tür bir istisna işlenmeyen bir özel durum ise; Uygulama kapatılmadan önce aşağıdaki şekilde gösterildiği için benzer bir bildirim görüntülenir.
Kullanıcı deneyimi açısından daha iyi bir uygulamanın bazı veya tüm aşağıdaki adımları izleyerek bu davranışı önlemek:
Kullanıcı dostu bilgilerini görüntüleme.
Çalışan bir uygulama tutmaya çalışıyor.
Ayrıntılı, geliştirici dostu özel durum bilgileri kayıt Windows olay Kütük'ü
Bu desteği sağlama bağlıdır işlenemeyen özel algılayabilmesini engeller ne olduğu DispatcherUnhandledException olaydır Kabarık for.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
DispatcherUnhandledException="App_DispatcherUnhandledException" />
Imports Microsoft.VisualBasic
Imports System.Windows ' Application
Imports System.Windows.Threading ' DispatcherUnhandledExceptionEventArgs
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_DispatcherUnhandledException(ByVal sender As Object, ByVal e As DispatcherUnhandledExceptionEventArgs)
' Process unhandled exception
...
' Prevent default unhandled exception processing
e.Handled = True
End Sub
End Class
End Namespace
using System.Windows; // Application
using System.Windows.Threading; // DispatcherUnhandledExceptionEventArgs
namespace SDKSample
{
public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// Process unhandled exception
...
// Prevent default unhandled exception processing
e.Handled = true;
}
}
}
DispatcherUnhandledException Olay işleyicisine geçirilir bir DispatcherUnhandledExceptionEventArgs durum da dahil olmak üzere işlenmemiş özel durum ile ilgili bağlamsal bilgiler içeren parametresi (DispatcherUnhandledExceptionEventArgs.Exception). Nasıl özel durum işleneceğini belirlemek için bu bilgileri kullanabilirsiniz.
Ne zaman ele DispatcherUnhandledException, ayarlamanız gerekir DispatcherUnhandledExceptionEventArgs.Handled özelliğine true; Aksi takdirde, WPF hala işlenmemiş olması için özel durum dikkate alır ve yukarıda açıklanan varsayılan davranış döner. İşlenmeyen bir özel durum ve ya da DispatcherUnhandledException olay Is not handled veya olay ele alınır ve Handled ayarlanır false, uygulama hemen kapanır. Ayrıca, baka Application olaylara neden oldu. Sonuç olarak ele alması gereken DispatcherUnhandledException , uygulamanızın kodu önce uygulamayı kapatır çalıştırmak gerekir vardıraşağı.
Uygulama sonucunda işlenmeyen bir özel durum kapanabilir rağmen bir uygulama genellikle bir kullanıcı isteğine yanıt olarak sonraki bölümde anlatıldığı gibi kapanır.
Uygulama yaşam olayları
Tek başına çalışan uygulamaları ve XBAPs tam olarak aynı yaşam yoktur. Aşağıdaki şekilde, tek başına uygulama yaşam süresi önemli etkinlikler göstermektedir ve içinde toplamış sırası gösterilmiştir.
Benzer şekilde, yaşam süresini önemli olayları aşağıdaki şekilde gösterilmiştir bir XBAPve içinde toplamış sırası gösterilmiştir.
Diğer uygulama Hizmetleri
Bir uygulamanın yaşam yönetme ek olarak Application içeren aşağıdaki hizmetleri sağlar:
Paylaşılan uygulama kapsamlı özellikler.
Paylaşılan uygulama kapsamlı kaynaklar.
Uygulama kaynağı, içerik ve kaynak sitesi veri dosyaları.
Pencere Yönetimi.
Gezinme yönetimi.
Paylaşılan uygulama kapsamlı özellikler
Uygulamanın sağladığı Properties özellik avantajlarına üzerinden paylaşılabilecek durumu göstermek içinbir uygulama. Aşağıdakileri kullanarak bir örnek sağlar Properties:
' Set an application-scope property with a custom type
Dim customType As New CustomType()
Application.Current.Properties("CustomType") = customType
...
' Get an application-scope property
' NOTE: Need to convert since Application.Properties is a dictionary of System.Object
Dim customType As CustomType = CType(Application.Current.Properties("CustomType"), CustomType)
// Set an application-scope property with a custom type
CustomType customType = new CustomType();
Application.Current.Properties["CustomType"] = customType;
...
// Get an application-scope property
// NOTE: Need to convert since Application.Properties is a dictionary of System.Object
CustomType customType = (CustomType)Application.Current.Properties["CustomType"];
See the following for more information:
Nasıl Yapılır: Uygulama Kapsamı Özelliklerini Alma ve Ayarlama
Nasıl Yapılır: Uygulama Oturumları Arasında Uygulama Kapsamı Özelliklerini Koruma ve Geri Yükleme
Paylaşılan uygulama kapsamlı kaynaklar
Uygulamanın sağladığı Resources özelliğine geliştiriciler paylaşmak izin UI kaynaklar arasında bir uygulama. Aşağıdakileri kullanarak bir örnek sağlar Resources:
' Set an application-scope resource
Application.Current.Resources("ApplicationScopeResource") = Brushes.White
...
' Get an application-scope resource
Dim whiteBrush As Brush = CType(Application.Current.Resources("ApplicationScopeResource"), Brush)
// Set an application-scope resource
Application.Current.Resources["ApplicationScopeResource"] = Brushes.White;
...
// Get an application-scope resource
Brush whiteBrush = (Brush)Application.Current.Resources["ApplicationScopeResource"];
See the following for more information:
Uygulama kaynağı, içerik ve kaynak sitesi veri dosyaları
WPFkodu olmayan veri dosyaları, kaynak dosyaları, içerik dosyalarını ve kaynak site dosyaları da dahil olmak üzere çeşitli türlerde uygulamaları yönetebilirsiniz. Bu tür veri dosyaları yüklemek için aşağıdaki yardımcı yöntemler kullanılabilir:
Pencere Yönetimi
Applicationve Window sahip yakın bir ilişki. Gördüğünüz gibi bir uygulamanın yaşam belirtildiği gibi windows kullanım ömrü bağımlı olabileceği ShutdownMode özelliği. ApplicationHangi pencerenin görüntüleneceği ana uygulama penceresine belirlenmiş kayıtları (Application.MainWindow) ve şu anda örneklenmiş windows listesini tutar (Application.Windows).
For more information, see WPF Windows Genel Bakış.
Gezinme Yönetimi
Tek başına çalışan uygulamaları ile gezinti için (kullanarak NavigationWindow ve Frame) veya XBAPs, Application herhangi bir uygulama içinde gezinti algılar ve uygun olarak aşağıdaki olaylar oluşturuyor:
Ayrıca, Application sağlar uygulamalar oluşturmak için ısrar ve tanımlama bilgileri kullanarak almak için herhangi bir tür GetCookie ve SetCookie
For more information, see Gezintiye Genel Bakış.
Ayrıca bkz.
Başvuru
Kavramlar
WPF Uygulama Kaynağı, İçerik, ve Veri Dosyaları