Üye Girişi

Lütfen kullanıcı adınızı ve şifrenizi ilgili alanlara giriniz!

Üye değilseniz lütfen tıklayınız

Şifremi Unuttum

Şifrenizi unuttuysanız tıklayınız
favorite

WPF Application Sınıfı

WPF'te uygulama başladığı zaman Application nesnesi yaratılır. Uygulama çalıştığı sürece, çeşitli event'lar meydana gelir. Son olarak, bu nesne destroy edilir ve uygulama kapanmış olur.

Application Nesnesi Yaratmak

Application nesnesi yaratmanın en temel yolu Main() metodu içerisinde manuel olarak yaratmaktır:

using System;
using System.Windows;
public class Startup
{
    [STAThread()]
    static void Main()
    {
        // Application nesnesi yaratiliyor
        Application app = new Application();
        // Ana pencere yaratiliyor. Bu pencere ekranda ilk gosterilecek penceredir
        Window1 win = new Window1();
        //Uygulama calistiriliyor
        app.Run(win);
    }
}

Ana window (pencere) kapatıldığı zaman Main metodundaki Application nesnesinin Run metodu çalışır ve bu metodtan sonra yazılmış kodlar da çalıştıktan sonra uygulama kapatılmış olur.

        Visual Studio'da bir uygulama yarattığımız zaman, temel Application sınıfı kullanılmaz. Onun yerine Application sınıfından türeyen sınıf kullanılır. Bunun nedeni karmaşık uygulamalarda event handling işlemlerinde ana Application sınıfına event-handling kodlarını ekleyemeyeceğimiz için bu şekilde kullanmak daha mantıklıdır.

Visual Studio'da WPF uygulaması yarattığımız zaman App.xaml isimli bir dosya oluşturulur. Bu dosyanının içeriği aşağıdaki gibidir:

<Application x:Class="TestApplication.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Window1.xaml"
             >
</Application>

App.xaml isimli dosya ile birlikte App isimli bir sınıf ta yaratılır. Örnekteki TestApplication.App ifadesindeki App bu sınıfı temsil eder. TestApplication ise namespace'i ifade eder. App sınıfı Application sınıfından türetilir. Ayrıca StartupUri attribute'si ile ekranda ilk gösterilecek pencere belirtilir.

Not: Application sınıfı iki parça halinde tanımlanmıştır. Bir parçası compile zamanında otomatik oluşur. Bu kısımda Main metodu bulunmaktadır. İçeriği aşağıdaki kod parçasına benzer:

using System;
using System.Windows;
public partial class App : Application
{
    [STAThread()]
    public static void Main()
    {
        TestApplication.App app = new TestApplication.App();
        app.InitializeComponent();
        app.Run();
    }
    public void InitializeComponent()
    {
        this.StartupUri = new Uri("Window1.xaml", System.UriKind.Relative);
    }
}

Eğer bu sınıfın içeriğini görmek isterseniz obj\Debug klasörü içerisindeki App.g.cs dosyasına bakabilirsiniz.

Application sınıfının ikinci kısmı App.xaml.cs gibi bir dosyada bulunur. Bu sınıfa uygulamanın event-handling kodlarını yerleştirebiliriz:

public partial class App : Application
{
}

Uygulamayı çalıştırdığımız zaman bu kısım otomatik olarak üretilen diğer kısım ile birleştirilir.


Uygulamanın Kapatılması

Uygulamanın nasıl kapatılacağını belirlemek için Application sınıfının ShutdownMode isminde bir property'si vardır. Application nesnesini kendimiz üretiyorsak, ShutdownMode property'i değerini değiştirebiliriz veya App.xaml dosyasına sahipsek, bu dosya içinde değiştirebiliriz. Bu property üç farklı değerden birini alır:

OnLastWindowClose Varsayılan değerdir. Bir pencere kalana kadar uygulama çalışır. Eğer tüm pencereler kapatılırsa uygulama kapatılmış olur.
OnMainWindowClose App.xaml dosyasında tanımlanan ana pencere kapatıldığı zaman uygulama kapatılmış olur.
OnExplicitShutdown Tüm pencereler kapatılsa bile, Application.Shutdown() metodunu çağırmadıkça uygulama kapanmaz.

App.xaml dosyasında aşağıdaki gibi kullanabiliriz:

<Application x:Class="TestApplication.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Window1.xaml"
             ShutdownMode="OnMainWindowClose"
             >
</Application>


PayPal - Online ödeme yapmanın daha güvenli ve kolay yolu!


Bu makale hakkında yapılan yorumlar


ZEHRA OK
23-11-2016

Merhabalar, Console uygulamasından wpf uygulamasını açmaya çalışıyorum.Bunun için; Application app = new Application(); app.Run(new ClassroomControl.MainWindow()); kodunu console uygulamasının içinde [STAThread] (Program.cs içinde) ile birlikte kullanıyorum. Ayrıca wpf uygulamasındaki App.g.cs scriptini de yazınıza uygun olarak güncelledim ([STAThread] ekleyrek) ancak "The calling thread must be STA, because many UI components require this." hatası alıyorum.Sebebi hakkında bi fikriniz var mı ?

CEVAPLA

INFO CODESENIOR
05-01-2017

Merhaba açıkçası hiç karşılaşmadım. Ama şu linkte detaylı çözüm önerilmiş: http://stackoverflow.com/questions/2329978/the-calling-thread-must-be-sta-because-many-ui-components-require-this

CEVAPLA


Yorum Yaz

Adınız*
Soyadınız* 
Email* 
Konu* 
(12 + 5) Kaç Eder: