Aracılığıyla paylaş


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)).

NotNot

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();
        }
    }
}
NotNot

İ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.

NotNot

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.

NotNot

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ı.

NotNot

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.

NotNot

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ş.

NotNot

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.

NotNot

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.

NotNot

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.

İşlenmeyen özel durum bildirimi

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.

Tek Başına Uygulama - Uygulama Nesnesi Olayları

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.

XBAP - Uygulama Nesnesi Olayları

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:

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

Application

Kavramlar

WPF Windows Genel Bakış

Gezintiye Genel Bakış

WPF Uygulama Kaynağı, İçerik, ve Veri Dosyaları

WPF İçinde URI'leri Paketleme

Uygulama Geliştirme

Diğer Kaynaklar

Uygulama Modeli: Nasıl Yapılır Konuları