Makale Özeti

Merhaba arkadaşlar, bu makalemizde Silverlight 3 Beta ile gelen yeniliklerden biri olan Network bağlantısının durumunun nasıl kontrol edildiğine bakacağız.

Makale

Silverlight 3 Beta ile birlikte gelen yeniliklerden biri de Network bağlantısının durumunun kontrol edilebilmesidir. Daha önceki yazılarımda da belirtmiştim, Silverlight uygulamalarını artık browser dışına taşıyabiliyoruz. Browser dışında çalışan uygulama oyun ve banner ise sorun olmayacaktır fakat uygulama veri ile entegreli olarak çalışıyorsa ve bağlantı yoksa hata verecektir. Burada hata olmasını istemiyorsak network bağlantısını kontrol edip ona göre işlem yaptırmamız gerekir. Bunu yapabilmemiz için ilk olarak projemizin referanslarına System.Net.NetworkInformation isimli namespace’i eklememiz gerekiyor. Bu namespace içinde kullanabileceğimiz iki tane abstract class var. NetworkInterface, NetworkChange

using System.Net.NetworkInformation;

NetworkInterface

Bu sınıfın içinde GetIsNetworkAvailable isimli geriye Boolean değer döndüren bir metot var. Bu metot o andaki bağlantının durumunu kontrol ediyor. Eğer bağlantı varsa geriye true, bağlantı yoksa geriye false değer dönüyor.

NetworkInterface.GetIsNetworkAvailable()

NetworkChange
Bu sınıf içinde de bir NetworkAddressChangedEventHandler isimli bir event var. Bu event network bağlantısının durumu değiştiğinde yani bağlantı kesildiğinde yada bağlantı geldiğinde çalışıyor.

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);

Yeni bir Silverlight uygulaması oluşturalım ve formumuza TextBlock ve Rectangle kontrolü ekleyelim. TextBlock kontrolünün Text özelliğinde bağlantı durumu görüntülenecek. Rectangle nesnesini fill özelliğinde de network bağlantısının durumuna göre değiştireceğiz.

[XAML]
<UserControl x:Class="SL30Networking.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="100">
<Canvas x:Name="LayoutRoot" Background="White">
<TextBlock x:Name="durumText" Text="Bağlantı Durumu" Canvas.Left="100" FontWeight="Bold" Canvas.Top="15"></TextBlock>
<Rectangle x:Name="durumu" Width="200" Height="30" Stroke="Black" Canvas.Left="100" Canvas.Top="40"></Rectangle>
</Canvas>
</
UserControl>

İlk olarak bağlantının durumunu kontrol eden bir metot yazalım. Bu metot bağlantının durumuna göre TextBlock ve Rectangle nesnesinin özelliklerini değiştirecek. Form ilk çalıştığında ve bağlantı durumu değiştiğince tetiklenecek olan eventleri oluşturalım. Her iki event içinde de yazdığımız metodu çağıracağız.

[C#]
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

// Eklemeyi unutmuyoruz…
using System.Net.NetworkInformation;

namespace
SL30Networking
{
public partial class MainPage : UserControl
{

// Bu metot ile bağlantının durumunu kontrol edip TextBlock ve Rectangle nesnesinin özelliklerini değiştiriyoruz.
private void NetworkuKontrolEt()
{
// Bağlantının durumunu kontrol eden metot. Eğer bağlantı varsa true, yoksa false döner.
if (NetworkInterface.GetIsNetworkAvailable()) // Bağlantı varsa çalışacak
{
durumText.Text = "Bağlantı Durumu : Bağlantı var";
durumu.Fill = new SolidColorBrush(Colors.Green);
}
else // Bağlantı yoksa çalışacak
{
durumText.Text = "Bağlantı Durumu : Bağlantı yok";
durumu.Fill = new SolidColorBrush(Colors.Red);
}
}

public MainPage()
{
InitializeComponent();
// Bağlantının durumu değiştiğinde çalışacak olan event listeneri oluşturuyoruz
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
this.Loaded+= new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
// Form ilk yüklendiğinde oluşturduğumuz metodu çağıralım.
NetworkuKontrolEt();
}

void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
// Bağlantınun durumu değiştiğinde tekrar oluşturduğumuz metodu çağıralım.
NetworkuKontrolEt();
}
}
}

Şimdi bağlantımız varken uygulamamızı çalıştıralım.



Evet bağlantı var ve Rectangle nesnemiz yeşil renkte. Bağlantıyı kopartalım,



Uygulamamıza dönelim tekrar,



Bağlantının olmadığını görebiliyoruz.

Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)

Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com

Kaynaklar
msdn.com
silverlight.net