<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nurullah DEMİR - The day will come just wait.. &#187; C#</title>
	<atom:link href="http://www.ndemir.com/kategori/coding/dot-net-c-sharp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ndemir.com</link>
	<description>The day will come just wait..</description>
	<lastBuildDate>Sat, 04 Feb 2012 02:10:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>C# : Kelime Ayırma</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-kelime-ayirma</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-kelime-ayirma#comments</comments>
		<pubDate>Sun, 25 Sep 2011 20:54:02 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# first word]]></category>
		<category><![CDATA[c# get first word]]></category>
		<category><![CDATA[c# how to get first word]]></category>
		<category><![CDATA[c# ilk kelime]]></category>
		<category><![CDATA[c# ilk kelimeyi alma]]></category>
		<category><![CDATA[c# kelime ayıklama]]></category>
		<category><![CDATA[c# kelime ayırıcı]]></category>
		<category><![CDATA[c# kelime ayırma]]></category>
		<category><![CDATA[c# kelime işlemleri]]></category>
		<category><![CDATA[c# kelime seçme]]></category>
		<category><![CDATA[c# selecting word]]></category>
		<category><![CDATA[csharp]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2934</guid>
		<description><![CDATA[Bir projemde bir method yazmam gerekti. Method ile verilen bir cümle/kelime öbeğinden istediğiniz karaktere göre istediğiniz kelimeleri çekmektedir. &#160; Methodumuz şu : &#160; &#160; Örneğin cümlemiz şu olsun : “Lütfullah fotoğraf makinesini bana getir.” cümlesinde ilk iki kelimeyi almak istersek ; Ayracımız ‘ ‘ (boşluk), almak istediğimiz kelime sayısı : 2 olacaktır. Buna göre methodu [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="csharp" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Kelime Ayırma dot net c sharp " width="155" height="176" />Bir projemde bir method yazmam gerekti. Method ile verilen bir cümle/kelime öbeğinden istediğiniz karaktere göre istediğiniz kelimeleri çekmektedir.</p>
<p>&nbsp;</p>
<p>Methodumuz şu :</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre class="brush: cpp; title: ; notranslate"> string getWord(string input, char bracket, int countOfWord)
        {
            string myWords = null;
            int count = 0;

            for (int i = 0; i &amp;lt; input.Length; i++)
            {
                if (input[i] != bracket)
                {
                    myWords += input[i];
                }
                else
                {
                    count++;
                    if (count == countOfWord)
                    {
                        return myWords;
                    }
                }
            }
            return myWords;
        }</pre>
<p>Örneğin cümlemiz şu olsun : “Lütfullah fotoğraf makinesini bana getir.” cümlesinde ilk iki kelimeyi almak istersek ; Ayracımız ‘ ‘ (boşluk), almak istediğimiz kelime sayısı : 2 olacaktır.</p>
<p>Buna göre methodu şöyle çağırmalıyız :</p>
<pre title="">string cumle = "Lütfullah fotoğraf makinesini bana getir.";
string gelenDeger = getWord(cumle,' ',2);</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-kelime-ayirma/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# : SQL Server Stored Procedure Kullanımı</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-sql-server-stored-procedure-kullanimi</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-sql-server-stored-procedure-kullanimi#comments</comments>
		<pubDate>Sat, 10 Jul 2010 07:47:59 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# commandtype]]></category>
		<category><![CDATA[c# procedure]]></category>
		<category><![CDATA[c# prosedür]]></category>
		<category><![CDATA[c# sql server procedure kullanımı]]></category>
		<category><![CDATA[c# sql server proedür hakkında]]></category>
		<category><![CDATA[c# sql server prosedür kullanımı]]></category>
		<category><![CDATA[c# sqlparameter]]></category>
		<category><![CDATA[c# stored prosedür]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[sql server procedure]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2397</guid>
		<description><![CDATA[Önceki yazımızda SQL Server da nasıl Stored Procedure yazılır onu anlatmıştım (bu yazıya başlamadan belirttiğim yazıyı okumanızı tavsiye ederim). Bu yazımda C# tarafında oluşturduğuz prosedürü nasıl kullanabiliriz, onu göstereceğim inş Önceki yazımızda hatıralarsanız kendi sınıfımızı yazmıştık verileri saklamak için. Yine aynı yolu izliyeceğiz. Kullanımı o kadar da zor değil. İlk önce aşağıdaki kodu inceleyelim, sonra [...]]]></description>
			<content:encoded><![CDATA[<p>Önceki yazımızda <a href="http://www.ndemir.com/_net/sql-server/sql-server-prosedur-hk" >SQL Server da nasıl Stored Procedure yazılır</a><img class="alignleft" src="http://ndemir.com/img/csharp.png" alt="csharp C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " width="155" height="176" title="csharp C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " /> onu anlatmıştım (bu yazıya başlamadan belirttiğim yazıyı okumanızı tavsiye ederim). Bu yazımda C# tarafında oluşturduğuz prosedürü nasıl kullanabiliriz, onu göstereceğim inş <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " class='wp-smiley' title="icon smile C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " /> </p>
<p>Önceki yazımızda hatıralarsanız kendi sınıfımızı yazmıştık verileri saklamak için. Yine aynı yolu izliyeceğiz.<br />
Kullanımı o kadar da zor değil. İlk önce aşağıdaki kodu inceleyelim, sonra da açıklayalım.</p>
<p>Kategorilerimizi sakladığımız sınıfımız şöyle ;</p>
<pre class="brush: cpp; title: ; notranslate">
using System;

namespace OrnekUygulama
{
    class KategoriInfo
    {
        int katID;
        public int KatID
        {
            get { return katID; }
            set { katID = value; }
        }

        string katAdi;
        public string KatAdi
        {
            get { return katAdi; }
            set { katAdi = value; }
        }

        public KategoriInfo(int katIDs,string katAdi)
        {
            this.KatAdi = katAdi;
            this.KatID = katID;
        }
    }
}
</pre>
<p><span id="more-2397"></span><br />
<em>Sınıfı neden oluşturduğumuzdan bahsetmeyeceğim, yukarıda belittiğim yazıda detaylı olarak bahsedilmiştir.<br />
</em></p>
<p>Şimdi gelelim Stored Precedure kullanımına;</p>
<pre class="brush: cpp; title: ; notranslate">
   SqlConnection con = new SqlConnection(&quot;Connection Stringimiz..&quot;);
            SqlCommand cmd = new SqlCommand(&quot;KategorileriGetir&quot;, con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter _param = new SqlParameter(&quot;@kategoriDurum&quot;, SqlDbType.Int);
            _param.Value = 1;
            cmd.Parameters.Add(param);
            SqlDataReader _dr = cmd.ExecuteReader();
            List&lt;KategoriInfo&gt; listem = new List&lt;KategoriInfo&gt;();

            while (_dr.Read())
            {
                KategoriInfo info = new KategoriInfo(_dr.GetString(1), _dr.GetInt32(0));
                listem.Add(info);
            }
//Bu satırdan itibaren verilerimiz listem nesnesinde saklıdır. Bundan sonrası size kalmış : )
</pre>
<p>Şimdi ne yaptık onu açıklayalım.<br />
<strong>2. Satırda </strong><br />
SqlCommand da CommanString i yerine prosedürümüzün adını yazdık.</p>
<p><strong>3.Satırda</strong><br />
Daha sonra SqlConnection&#8217;a dedik ki ; sana verdiğimiz string i commandtext olarak algılama bunun tipi bir Stored Procedure ona göre davran. (Stored Procedure kullanmadığımız zamanlarda varsayılan değeri CommandText olarak atanır)</p>
<p><strong>Bu prosedürümüz dışarıdan değer alıyor mu ? Evet alıyor</strong><br />
<strong>4. Satırda</strong><br />
Prosedürümüz parametre alıyorsa bizim bu parametreyi göndermemiz gerekiyor. O yüzden 4. satırda yeni bir parametre tanımladım. Ve dedim ki ; bu parametremin adı &#8220;@kategoriDurum&#8221; değeri ise SqlDbType.Int dir.<br />
<strong>5.Satırda</strong><br />
Buraya kadar parametremizi tanımlamıştık, şimdi ise parametremizin değerini giriyoruz.<br />
<strong>6.Satırda</strong><br />
Son olarak ta SqlCommand a dedimki, sen şu parametreyi al sakla, sana verdiğim prosedürü çalıştırırken bu parametrelere ihtiyacın olacak ve Add metodu ile SqlParameter tipinde olan _param i ekledik.<br />
Eğer parametreleriniz çok ise, tek tek SqlParameter tipinde değerler oluşturmayın. SqlParameter[] olarak tanımlayın ve SqlCommand a AddRange metodu ile oluşturduğunuz diziyi ekleyin.</p>
<p>Gerisi zaten normal sql command çalıştırma ile aynı olduğundan burada nokta koyuyorum <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " class='wp-smiley' title="icon smile C# : SQL Server Stored Procedure Kullanımı sql server dot net c sharp " /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-sql-server-stored-procedure-kullanimi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Server : Stored Procedure hk.</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/sql-server-prosedur-hk</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/sql-server-prosedur-hk#comments</comments>
		<pubDate>Sat, 10 Jul 2010 07:11:15 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[sql server da prosedür yazımı]]></category>
		<category><![CDATA[sql server procedure]]></category>
		<category><![CDATA[sql server procedure yazma]]></category>
		<category><![CDATA[Sql server prosedür]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2356</guid>
		<description><![CDATA[SQL Server yapısında bulunan çok güzel bir özellik. Metodlar gibi düşünebilirsiniz. Stored Procedure&#8217;ler; Veritabanımızın altında bulunan Programmability klasöründe Stored Procedure isimli klasörde bulunur. Yeni prosedür oluşturmak için Stored Procedure a sağ tuşla basıp &#8220;New Stored Procedure&#8221; diyoruz. Ve gelen pencereden prosedürümüzü yazmaya başlıyoruz.. Prosedürümüzü oluşturmaya create komutu ile başlıyoruz, Basit bir prosedür yazdık, Kategoriler tablosundaki [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://ndemir.com/img/sql.gif" alt="sql SQL Server : Stored Procedure hk. sql server dot net c sharp " width="296" height="75" title="sql SQL Server : Stored Procedure hk. sql server dot net c sharp " />SQL Server yapısında bulunan çok güzel bir özellik. Metodlar gibi düşünebilirsiniz.</p>
<p>Stored Procedure&#8217;ler; Veritabanımızın altında bulunan Programmability klasöründe Stored Procedure isimli klasörde bulunur. Yeni prosedür oluşturmak için Stored Procedure a sağ tuşla basıp &#8220;New Stored Procedure&#8221; diyoruz. Ve gelen pencereden prosedürümüzü yazmaya başlıyoruz..</p>
<p>Prosedürümüzü oluşturmaya create komutu ile başlıyoruz,</p>
<pre class="brush: sql; title: ; notranslate">
create KategorileriGetir(@kategoriDurum int)
as
begin
if(@kategoriDurum=1)
select * from kategoriler where aktif=1
else
select * from kategoriler where aktif=@kategoriDurum
end
</pre>
<p><span id="more-2356"></span><br />
Basit bir prosedür yazdık, Kategoriler tablosundaki kategorileri çekmesini istiyoruz fakat hangi durumdaki (kategori pasifmi,aktif mi olarak ayarlanmış) kategorilerin getireleceğini gönderdiğimiz parametre ile biz seçiyoruz. Bu yüzden prosedür adından sonra parantez açıp dışardan alacağı parametre adını ve türünü yazdım. Prosedürümüzün tüm kodları begin ile end komutu arasında bulunur. Biz bu blogda, dışardan gelen verinin türüne bakarak istenilen durumdaki kategorileri gönderdik.<br />
İlla dışarıdan parametre alacak diye birşey yok, metodlardaki gibi dedi ya gerçektende öyle. İster dışarıdan parametre alır, ister almaz. Bunu da biz belirliyoruz.<br />
Parametre almayan bir prosedüre örnek ;</p>
<pre class="brush: sql; title: ; notranslate">
create KategorileriGetir
as
begin
select * from kategoriler
end
</pre>
<p>Parametrelerimizin default özellikleri input dur. Yani parametre dışarıya değerini göndermez, dışardan aldığı değer ile içeride işlem yapar ve işlemi biter. Parametrelerimizi output olarak da ayarladıktan sonra prosedürün çağrıldığı yerden output özellikli parametrenin değeri okunabilir.<br />
<a href="http://www.ndemir.com/_net/dot-net-c-sharp/c-sql-server-stored-procedure-kullanimi"><br />
C# SQL Server Stored Prosedür kullanma</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/sql-server-prosedur-hk/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C# : SQL Server</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-sql-server</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-sql-server#comments</comments>
		<pubDate>Mon, 28 Jun 2010 09:06:23 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# ile sql server kullanımı]]></category>
		<category><![CDATA[c# örnek uygulama]]></category>
		<category><![CDATA[c# sql server bağlanma]]></category>
		<category><![CDATA[c# sql server bağlantısı]]></category>
		<category><![CDATA[c# sql server connection]]></category>
		<category><![CDATA[c# sqlcommand]]></category>
		<category><![CDATA[c# sqlconnection]]></category>
		<category><![CDATA[c# sqldatareader]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2344</guid>
		<description><![CDATA[Hayırlı günler, SQL Server ile ilgili ilk dökümanım, bu dökümanda SQL Server ile C# bağlantısı nasıl yapılır ona göstereceğim. Ayırca DataSet gibi hantal bir yapıdan nasıl kurtulucaz onu da göstereceğim inş Üzerinde çalışacağımız SQL Server örnek veritabanını buradan (Veritabanı yedeğidir, SQL Server Management Studio 2008 ile aldığım yedektir.) indiriniz. [projeyi yazının altından indirebilirsiniz.] MakaleUygulama adında [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://ndemir.com/img/sql.gif" alt="sql C# : SQL Server  sql server dot net c sharp " width="237" height="60" title="sql C# : SQL Server  sql server dot net c sharp " />Hayırlı günler,<br />
SQL Server ile ilgili ilk dökümanım, bu dökümanda SQL Server ile C# bağlantısı nasıl yapılır ona göstereceğim. Ayırca DataSet gibi hantal bir yapıdan nasıl kurtulucaz onu da göstereceğim inş <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : SQL Server  sql server dot net c sharp " class='wp-smiley' title="icon smile C# : SQL Server  sql server dot net c sharp " /> </p>
<p>Üzerinde çalışacağımız SQL Server örnek veritabanını <a rel="nofollow" href="http://www.ndemir.com/cikis/http://ndemir.com/.net/SQLServerExample.rar" >buradan</a> (Veritabanı yedeğidir, SQL Server Management Studio 2008 ile aldığım yedektir.) indiriniz.<em> [projeyi yazının altından indirebilirsiniz.]</em></p>
<p>MakaleUygulama adında veritabanına sahip olduğunuzu varsayıyorum;</p>
<p>Amacımız veritabanında Kategoriler tablosunda bulunan tüm kategorileri getirmek olsun.</p>
<p>Form&#8217;un Load olayında bağlantımızı gerçekleştiriyoruz;<br />
<span id="more-2344"></span></p>
<pre class="brush: cpp; title: ; notranslate">
        // bu iki fieldi dışarda tanımlamamız gerekiyor, ileride ikisine ulaşmak zorunda kalabiliriz.
        SqlConnection con;
        SqlCommand cmd;
        private void Form1_Load(object sender, EventArgs e)
        {
            //yerel pc de çalıştığımız için Integrated Security i true yapmamız gerekiyor, eğer uzak pc e bağlansaydık bunun yerine K.adı ve şifre girmek zorunda kalacaktık.
            con = new SqlConnection(&quot;Data Source=localhost;Initial Catalog=MakaleUygulama;Integrated Security=true&quot;);
            cmd = new SqlCommand(&quot;Select KatID,KatAdi from Kategoriler&quot;, con);
        }
</pre>
<p>Sql Server connection stringine göz atalım, Data Source localhost dedik çünkü yerel bilgisayarda çalışıyoruz, Initial Catalog yerine veritabanı adını yazıyoruz. Integrated Security de üst tarafta yazdığım gibidir.</p>
<p>DataSet&#8217;ten kurtulmaktan bahsettim, nasıl kurtulacağımızı görelim şimdi ;</p>
<p>Önce şöyle bir class oluşturalım ; </p>
<pre class="brush: cpp; title: ; notranslate">
using System;

namespace OrnekUygulama
{
    class KategoriInfo
    {
        int katID;
        public int KatID
        {
            get { return katID; }
            set { katID = value; }
        }

        string katAdi;
        public string KatAdi
        {
            get { return katAdi; }
            set { katAdi = value; }
        }

        public KategoriInfo(int katIDs,string katAdi)
        {
            this.KatAdi = katAdi;
            this.KatID = katID;
        }
    }
}
</pre>
<p>DataSet kullansaydık tüm bilgilerimizi DataSet yapısında kaydedicektik, ama biz o hantal yapıyı değil, kendi oluşturduğumuz bir class da bize gerekli tüm bilgileri saklayacağız. Ufa çaplı projelerde göze çarpmaz ancak büyük çaplı projelerde DataSet performanslı değildir.</p>
<p>Daha sonra Kategorileri Getir butonunu click olayına şu kodları yazalım ;</p>
<pre class="brush: cpp; title: ; notranslate">
        private void btnGetCat_Click(object sender, EventArgs e)
        {
            con.Open();

            List&lt;KategoriInfo&gt; listem = new List&lt;KategoriInfo&gt;();

            SqlDataReader dr=cmd.ExecuteReader();
            while (dr.Read())
            {
                KategoriInfo info = new KategoriInfo(dr.GetInt32(0), dr.GetString(1));
                listem.Add(info);
            }

            listBoxKategori.DataSource = listem;
            listBoxKategori.DisplayMember = &quot;KatAdi&quot;;
            listBoxKategori.ValueMember = &quot;KatID&quot;;
            con.Close();
        }
</pre>
<p>con.Open(); ile bağlantımızı açtık.<br />
<strong>5.Satır</strong>da ise List de KategoriInfo cinsinden değerlerin saklanabileceğini belirttik. (bunun nedenini hemen altta öğrenecekcesiniz)</p>
<p><strong>7. Satır</strong>da DataReader&#8217;e hangi command nesnesini çalıştıracağını belirttik.</p>
<p>Döngü açtık, neden ?<br />
Çünkü DataReader, DataSet gibi tüm bilgileri saklı tutmaz, satır satır çalıştığı için, tek seferde tek satır getirebilir. Kaç kategorimiz var ? 2 o zaman bu döngü 2 defa dönecek, peki nasıl ?<br />
Veritabanından çekilecek bir kayıt varsa Read metodu true değerini döndürür, eğer yoksa false değerini döndürür, yani her seferinde bir kontrol gerçekleşiyor. </p>
<p><strong>10.satırda ne yaptık ?</strong><br />
Burada dr nesnesiyle mevcut satırda (datareader in satır satır çalıştığını söylemiştik) bulunan değerlerini alıp, oluşturduğumuz sınıfın property lerine atıyoruz, constructor da.</p>
<p>dr.GetValue ile de bütün değerleri alabiliyoruz ancak object türünde değer döndürdüğü için casting işlemine tabi tutulması gerekiyor, bu da performans kaybı olacağından biz gelecek verinin türünü belirtip veriyi çekiyoruz.</p>
<p>dr.GetInt32(0); ile gelecek verinin int32 türünde olduğunu belirtiyor ve aldığı 0 parametresi nedir peki ? O da gelecek tabloda 0.kolondaki veriyi belirtiyor. Biz sorgumuzda select KatID,KatAdi from Kategoriler diye oluşturduk. 0.kolon nedir? KatId.<br />
dr.GetString(1); ile gelecek verinin string türünde olduğunu belirttik ve 1. kolondaki veriyi almasını istedik.</p>
<p><strong>11.satır</strong><br />
Biz oluşturduğumuz List ile sadece KategoriInfo türünde değerleri almasını söyledik. Burada da Add metodu ile info nesnemizi List e ekliyoruz. (<a href="http://www.ndemir.com/_net/dot-net-c-sharp/c-diziler-arraylist-list-arasindaki-farklar" >List Nedir ?</a>)</p>
<p>Döngüden çıktık, verilerimizin hepsi nerede saklandı ? Oluşturduğumuz List olan listem de verilerimizin tümü saklı durumda.<br />
dr nesnemizde ne saklı peki ? Hiçbirşey saklı değil, çünkü dataset gibi çalışmaz sadece, satır satır veri çeker veritabanından.</p>
<p><strong>14.satır</strong><br />
Biz bir datatable i datasource olarak tanımlayabiliyorduk, peki 14.satırda nasıl olurda bir List i datasource olarak tanımlayabiliyoruz ?<br />
Cevabı şurda ; List in üzerine sağ tuşla basıp &#8220;Go to defination&#8221; diyip metadata sına bakalım. IList interface inden türemiş, IList arayüzünden türeyen herşey datasource olarak kullanılabilir.<br />
Yani şöyle diyebiliriz; Biz dataset kullanmayarak, kendi ihtiyaçlarımızı karşılayan bir dataset yazdık. (Tabi ki dataset yazmadık, çünkü bizim oluşturuduğumuz yapı ile dataset karşılaştırılırsa, KategoriInfo sınıfı datatable ile özdeşleştirilebilir, çünkü dataset yapısı datatable ıda içine alan bir yapıdır.)</p>
<p><strong>15 &#038; 16.satırda</strong><br />
DisplayMember olarak &#8220;KatAdi&#8221;, ValueMember olarak &#8220;KatID&#8221; i tanılmadık.<br />
Biz kendi kendi datatable mizi oluşturmuştuk zaten, Burada da oluşturduğumuz List de bulunan; KatAdi property sinin gösterilecek öğe olarak, KatID property sinin ise value(değer) elemanı olarak algılanmasını belirttik.</p>
<p>Programı çalıştırıp Kategoriyi göster butonuna bastığımızda kategorilerimizin geldiğini görüyoruz.</p>
<p>Döküman ağır gelmiş olabilir arkadaşlar, anlamadıysanız 2 defa okumanızı tavsiye ederim. Karmaşık gelebilir ama basit bir yapı. Bol bol pratik yapmanızı öneririm.<br />
<a rel="nofollow" href="http://www.ndemir.com/cikis/http://ndemir.com/.net/SQLServerOrnekUygulama.rar" >C# Sql Server Örnek Proje</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-sql-server/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>C# : Diziler, ArrayList, List arasındaki farklar</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-diziler-arraylist-list-arasindaki-farklar</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-diziler-arraylist-list-arasindaki-farklar#comments</comments>
		<pubDate>Thu, 24 Jun 2010 07:53:17 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# array arraylist list]]></category>
		<category><![CDATA[c# arraylist]]></category>
		<category><![CDATA[c# collections]]></category>
		<category><![CDATA[c# generic]]></category>
		<category><![CDATA[c# koleksiyonlar]]></category>
		<category><![CDATA[c# list]]></category>
		<category><![CDATA[csharp]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2342</guid>
		<description><![CDATA[Bugün çok kullanacağımız iki yapıyı sizlere kısa ve öz şekilde aktaracağım. ArrayList ve List. Diziler : Temel dizidir. Kötü tarafı, tanımlanırken sınır getirilmesi, 10 elemanlı bir diziye 11 eleman tanımlayamayız.  Kullanımı : Sinif[] nesne = new Sinif[5]; Gördüğünüz gibi maximum 5 eleman alabilir. Şimdi ArrayList ve List&#8217;e bakalım neler yapılabiliyor. ArrayList : Dizinin yaptığı tüm [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Diziler, ArrayList, List arasındaki farklar dot net c sharp " width="155" height="176" title="csharp C# : Diziler, ArrayList, List arasındaki farklar dot net c sharp " />Bugün çok kullanacağımız iki yapıyı sizlere kısa ve öz şekilde aktaracağım. ArrayList ve List.<br />
<strong>Diziler :</strong> Temel dizidir. Kötü tarafı, tanımlanırken sınır getirilmesi, 10 elemanlı bir diziye 11 eleman tanımlayamayız.  <span style="text-decoration: underline;"><br />
Kullanımı :</span><br />
Sinif[] nesne = new Sinif[5];<br />
Gördüğünüz gibi maximum 5 eleman alabilir. Şimdi ArrayList ve List&#8217;e bakalım neler yapılabiliyor.</p>
<p><strong><br />
ArrayList : </strong>Dizinin yaptığı tüm işleri yapar ama sınır getirilmediğinden istediğimiz kadar eleman ekleyebiliriz. Aldığı her elemanı boxing işlemi ile object olarak sakladığından Hertürlü değeri alabilir. Add,Remove,Sort gibi metodlar kullanışlı metodlardır.</p>
<p><span style="text-decoration: underline;">Kullanımı :</span><br />
ArrayList liste = new ArrayList();</p>
<p>liste.Add(nesnemiz); // yeni eleman ekleniyor.</p>
<p><strong>List :</strong></p>
<p>List dizinin yaptığı tüm işlemleri yapar buna ek olarak en önemli özelliği belirlenen türde veri saklayabilir. Bu sebepten dolayı veri saklanırken herhangi bir boxing işlemine tabi tutulmayacağından performans olarak ArrayList&#8217;den daha iyidir.</p>
<p><span style="text-decoration: underline;">Kullanımı :</span><br />
List&lt;Turumuz&gt; liste = new List&lt;Turumuz&gt;();</p>
<p>Kullanımı ArrayList gibidir, ekleme, silme vs..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-diziler-arraylist-list-arasindaki-farklar/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C# : Örnek Windows API&#8217;ler</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-ornek-windows-apiler</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-ornek-windows-apiler#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c# bilgisayarın adını öğrenme]]></category>
		<category><![CDATA[c# duvar kağıdını değiştirme]]></category>
		<category><![CDATA[c# örnek windows api]]></category>
		<category><![CDATA[c# pc i kapatma restart atma]]></category>
		<category><![CDATA[c# video oynatma api]]></category>
		<category><![CDATA[c# wav oynatma api]]></category>
		<category><![CDATA[c# windows api örnekleri]]></category>
		<category><![CDATA[csharp windows api]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2313</guid>
		<description><![CDATA[Örneklerle bazı API Fonksiyonları Windows oturumu kapatmak ya da yeniden başlatmak: Bu tip bir istekte Windows’un ExitWindowsEx() fonksiyonundan yararlanılmaktadır. Bu fonksiyon, Windows ile gelen “user32.dll” adlı DLL dosyasında tanımlı bulunmaktadır. Hemen bir örnekle bu fonksiyonun nasıl kullanılabildiğini görelim. Bir Windows application açıyoruz ve formumuza bir button ekliyoruz. Önce DLL dosyasımızı import etmemiz gerekiyor; Bu fonksiyon [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="C#,C# windows api, csharp" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Örnek Windows APIler dot net c sharp " width="155" height="176" />Örneklerle bazı API Fonksiyonları</p>
<p><strong>Windows oturumu kapatmak ya da yeniden başlatmak: </strong>Bu tip bir istekte Windows’un ExitWindowsEx() fonksiyonundan yararlanılmaktadır. Bu fonksiyon, Windows ile gelen “user32.dll” adlı DLL dosyasında tanımlı bulunmaktadır. Hemen bir örnekle bu fonksiyonun nasıl kullanılabildiğini görelim. Bir Windows application açıyoruz ve formumuza bir button ekliyoruz. Önce DLL dosyasımızı import etmemiz gerekiyor;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;user32.dll&quot;)]

public static extern int ExitWindowsEx(

int hFlags, int dwReserved);

Daha sonra buttonumuzun click olayına şunları yazıyoruz;

private void oturumkapat_Click_1(object sender, EventArgs e)

{

System.Windows.Forms.DialogResult Secim;

Secim = MessageBox.Show(&quot;Oturum kapatılsın mı?&quot;, &quot;Oturum kapatma&quot;, MessageBoxButtons.YesNoCancel);

if (Secim == DialogResult.Yes)

{

//eger bu fonksiyona 2.parametre olarak 1 verilseydi pc kapanirdi

//2.parametre olarak 2 kullanilirsa da pc yeniden baslardi

int sonuc = ExitWindowsEx(0, 0);

}

}
</pre>
<p>Bu fonksiyon çalıştırılıp MessageBox sınıfının Show() metodu tarafından ekrana gelen diyalog kutusundaki Evet buttonu tıklanınca geriye “DialogResult.Yes” gönderilir ve ExitWindowsEx() fonksiyonu çalışarak oturum kapatılır. Bu API fonksiyonu geçerli Windows sürümü ve kullanıcının yetkilerinden etkilendiği için farklı tepkiler alabiliriz.<span id="more-2313"></span><br />
<strong><br />
WAV uzantılı ses dosyalarını çalmak: </strong>Windows’un sndPlaySound() isimli API fonksiyonundan yararlanarak ses dosyalarını çalabiliriz. Hemen örneğimize geçelim. Yine bir Windows application açıyoruz ve bir button ile bir OpenFileDialog koyuyoruz. Önce DLL’imizi import ediyoruz;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;winmm&quot;)]

public static extern long sndPlaySound(string IpszSoundName, long uFlags);

//Tıklama olayına şu kodları yazıyoruz;

private void wavac_Click(object sender, EventArgs e)

{

long sonuc;

string dosya;

openFileDialog1.ShowDialog();

dosya = openFileDialog1.FileName;

sonuc = mciExecute(&quot;Play &quot; + dosya);

}
</pre>
<p>Birisi string diğeri long tipinde 2 parametreyi barındıran bu fonksiyon, geriye long tipinde bilgi döndürmektedir. Fonksiyonu çalıştırdığımızda ve buttonumuzu tıkladığımızda openfiledialog kutumuz açılacak ve istediğimiz wav uzantılı ses dosyasını açıp çalmamızı sağlayacak.<br />
<strong><br />
Video dosyalarını oynatmak: </strong>Windows’un yukarıda tanıdığımız sndPlaySound() fonksiyonu ile hem WAV dosyalı ses dosyalarını çalabiliyoruz hem de mciSendString() fonksiyonu ile video dosyalarını oynatabiliyoruz. Bir Windows application açıp 2 button ekliyoruz. Bunlardan biri ac isminde, ikincisi kapa isminde olacak. İlk önce DLL’imizi import ediyoruz.</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;winmm&quot;)]

private static extern int mciSendString(string strCommand, StringBuilder strReturn, int iReturnLenght, IntPtr hwndCallback);

//Şimdi ac isimli buttonumuzun click metoduna şu kodları yazıyoruz;

private void ac_Click(object sender, EventArgs e)

{

StringBuilder str = new StringBuilder(128);

IntPtr ptr = IntPtr.Zero;

string dosya;

int sonuc;

openFileDialog1.ShowDialog();

dosya = openFileDialog1.FileName;

sonuc = mciSendString(&quot;Open &quot; + dosya + &quot; Type AVIVideo Alias Video&quot;, str, 0, ptr);

sonuc = mciSendString(&quot;Play Video&quot;, str, 0, ptr);

}

//Burada mciSendString() fonksiyonunun “Open” parametresi yoluyla önce AVI dosyası açılmaktadır. Sonra fonksiyonun “Play Video” parametresi ile ikinci kez çağrılarak AVI dosyası oynatılmaktadır. Video oynatıldıktan sonra pencereyi kapatmak için kapa isimli buttonun click metoduna şunları yazıyoruz;

private void btnkapa_Click(object sender, EventArgs e)

{

StringBuilder str = new StringBuilder(128);

IntPtr ptr = IntPtr.Zero;

int sonuc;

sonuc = mciSendString(&quot;Close Video&quot;, str, 0, ptr);

}
</pre>
<p>Gördüğünüz gibi burada da “Close Video” parametresi kullanılarak oynatılan videonun penceresi kapatılıyor.</p>
<p><strong>Ses sürücü veya donanımlarının olup olmadığını kontrol etmek: </strong>Aslında bu fonksiyonu en başta tanımlamam gerekiyordu ama şimdi tanıtmamda da bir zararı yok. Video yada ses dosyalarımızı çalmadan önce, bilgisayarımızın ses sürücülerinin yada ses donanımının olup olmadığını waveOutGetNumDevs() isimli API fonksiyonuyla öğrenebiliriz. Önce DLL’imizi import edelim sonra windows application’ımıza button ve openfiledialog ekleyelim.</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;winmm&quot;)]

public static extern long waveOutGetNumDevs();

//Şimdi buttonumuzun click olayına şu kodları yazalım;

private void btnses_Click(object sender, EventArgs e)

{

IntPtr ptr;

ptr = IntPtr.Zero;

long sonuc;

sonuc = waveOutGetNumDevs();

if (sonuc == 0)

MessageBox.Show(&quot;Ses dosyalarını çalacak donanım bulunmamaktadır&quot;);

else

{

openFileDialog1.ShowDialog();

sonuc = sndPlaySound(openFileDialog1.FileName, ptr);

}

}
</pre>
<p>Bu fonksiyon dışarıdan herhangi bir bilgi almaktadır. Geriye sadece yapılan araştırmanın sonucu ile ilgili bilgi göndermektedir. Bilgisayarda ses aygıyı yoksa 0 değeri gönderir.</p>
<p><strong>C#.Net projelerinde başka programları çalıştırmak:</strong> Projelerimizde diğer programlardan da destek alabilmek için Windows’un WinExec() fonksiyonundan yararlanabiliriz. Bu fonksiyon 2 parametreye sahiptir. İlk parametrede çalıştırılacak program dosyasının adı verilmektedir, ikinci parametrede ise programa ait pencerenin ilk şekli belirtilmektedir. Örneğin bir notepad dosyasını çalıştıralım. İlk bir windows projesi açalım ve forma bir button ekleyelim. Önce DLL dosyamızı import ediyoruz;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;kernel32&quot;)]

private static extern long WinExec(string IpCmdLine, int nCmdShow);

Daha sonra buttonumuzun click olayına şu kodları yazıyoruz;

private void btnnotepad_Click(object sender, EventArgs e)

{

long sonuc;

sonuc = WinExec(&quot;C:\\Windows\\System32\\Notepad.exe&quot;, 9);

}
</pre>
<p>Bu fonksiyonda çalıştırılmak istenen program dosyası bulunamazsa, geriye 2 değeri döner. Belirtilen sürücü veya klasör bulunamazsa fonksiyon geriye 3 değeri döndürür. Belirtilen programı çalıştırmak için yeterli bellek yoksa geriye 8 değeri döndürür. Bizim yazdığımız 9 değeri, pencerenin orijinal boyutlarında açılmasını sağlamaktadır. Bu değer 6 olsaydı, program simge durumuna küçültülüp açılırdı.</p>
<p><strong>Herhangi bir dosyayı ilgili programla açmak: </strong>İstediğimiz bir dosyayı (word, excel, powerpoint, photoshop, autocad vb.) ilgili programla açmak veya print etmek istiyorsak ShellExecute() fonksiyonunu kullanırız. “shell32.dll” dosyasında tanımlı olan bu fonksiyon hakkında bir örnek verelim. Önce windows projemizi açıyoruz bir button ekliyoruz. İlk kod olarak dll’imizi import ediyoruz;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;shell32.dll&quot;)]

public static extern int ShellExecute(int hWnd, string IpOperation, string IpFile, string IpParameters, string IpDirectory, int snShowCmd);

//Şimdi buttonumuzun click olayına şu kodları yazıyoruz;

private void btnie_Click(object sender, EventArgs e)

{

ShellExecute(0, &quot;Open&quot;, &quot;http://www.microsoft.com&quot;, &quot;&quot;, &quot;&quot;, 1);

}
</pre>
<p>ShellExecute() fonksiyonu 6 parametreye sahiptir. 1. parametrede handle numarası, 2. parametrede yapılacak işlem ve 3. parametrede seçilen işlemin uygulanacağı dosya olmaktadır. Yukarıda 0 diyerek bilgisayarımızda kullandığımız default web browser’ı seçmiş oluruz. Örneğin şu şekilde geçerli e-mail programımızı çalıştırıp (genelde outlook olur) e-mail gönderebiliriz;</p>
<pre class="brush: cpp; title: ; notranslate">
private void btnout_Click(object sender, EventArgs e)

{

ShellExecute(0, &quot;Open&quot;, &quot;mailto:yagizgonuler@gmail.com&quot;, &quot;&quot;, &quot;&quot;, 1);

}
</pre>
<p>Gördüğünüz gibi burada da default mail programımızı çalıştırıp mail yolayabiliriz.</p>
<p>WinExec() ve ShellExecute() yerine Shell() fonksiyonunu kullanmak: C#.Net projelerimizde bu fonksiyonları kullanmak yerine Visual Basic’in Shell() fonksiyonu nu da kullanabiliriz. Bu durumda dll import etmemiz gerekmiyor, solution explorer penceresinden add reference diyerek Microsoft.Visual Basic isimli reference’ı projemize eklememiz gerekiyor. Bu işlemden sonra windows projemize bir button koyup click olayına şu kodları yazalım;</p>
<pre class="brush: cpp; title: ; notranslate">
private void btnshellnotepad_Click(object sender, EventArgs e)

{

Microsoft.VisualBasic.Interaction.Shell(&quot;C:\\Windows\\Notepad.exe&quot;, Microsoft.VisualBasic.AppWinStyle.NormalFocus, true, -1);

}
</pre>
<p>1.Parametrede belirtilen değer, programın yoludur. Biz burada sadece programı normal pencere boyutlarında açarız. Ancak istersek programla beraber bir dosyayı da açabiliriz. Bu durumda buttonumuzun click olayına şu kodları yazmamız gerekir;</p>
<pre class="brush: cpp; title: ; notranslate">
private void btnshellfile_Click(object sender, EventArgs e)

{

Microsoft.VisualBasic.Interaction.Shell(&quot;C:\\Windows\\Notepad.exe C:\\test.txt&quot;, Microsoft.VisualBasic.AppWinStyle.NormalFocus, true, -1);

}
</pre>
<p>Böylece notepad dosyamızı çalıştırırken, C’nin içerisindeki test.txt isimli dosya açılır. NormalFocus koduyla programın penceresi normal konumda ve normal boyutta ekrana gelir. Eğer bunun küçültülmesini isteseydik AppWinStyle.MinimizedFocus kodunu yazardık. Ekranı kaplamasını isteseydik AppWinStyle.MaximizedFocus, programın aktif pencere olmasını istemeseydik AppWinStyle.NormalNoFocus veya MinimizedNoFocus seçeneklerini 2.parametre olarak yazabilirdik.</p>
<p><strong>Belgeler klasörüne kısayol eklemek: </strong>Windows XP’de son kullandığımız belgelerin kısayolunu başlat menüsüne ekleyen “en son kullandıklarım” adlı bir bölüm vardır. Bu bölüme Windows’un SHAddToRecentDocus fonksiyonundan yararlanarak belge adı veya komut ekleyebiliriz. Önce dll’imizi import edelim;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;shell32&quot;)]

public static extern int SHAddToRecentDocs(int uFlags, string pv);

//Şimdi windows projemize bir button ekleyelim ve click olayına şunları yazalım;

private void btnekle_Click(object sender, EventArgs e)

{

int sonuc;

sonuc = SHAddToRecentDocs(2, &quot;C:\\cekys.dwg&quot;);

}
</pre>
<p>Burada C’nin içerisindeki cekys.dwg isimli autocad dosyasını, başlat menüsündeki “en son kullandıklarım” isimli bölüme kısayol olarak eklemiş oldum.</p>
<p>Bilgisayarın açık kaldığı süreyi öğrenmek: Windows’un GetTickCount() isimli fonksiyonundan yararlanarak ne kadar zamandır açık bulunduğunu öğrenebiliriz.</p>
<p>Önce bir windows projesi açalım ve dll’imizi import edelim;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;kernel32.dll&quot;)]

public static extern long GetTickCount();

//Şimdi ise projemize bir textbox ekliyip formun load olayına şu kodları yazalım;

private void Form1_Load(object sender, EventArgs e)

{

long gecen_sure;

gecen_sure = GetTickCount() / 1000;

textBox1.Text = gecen_sure.ToString();

}
</pre>
<p>Burada textboxımıza bilgisayarımızın açık kaldığı süreyi saniye cinsinden yazdırıyoruz. Dilersek bunu gün, saat, dakika şeklinde de ifade edebiliriz.</p>
<p><strong>Bilgisayarın adını öğrenmek:</strong> Kullandığımız bilgisayarın adını C#.Net projemizin dahilinde öğrenmek istediğimiz zaman Windows’un GetComputerName() fonksiyonundan yararlanabiliriz. Not olarak ekliyim; Windows’un “Sistem Özellikleri” diyalog kutusundan, bilgisayarımızın adını değiştirebiliriz. Şimdi bir windows projesi açalım ve gerekli olan dll’imizi import edelim;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;kernel32.dll&quot;)]

public static extern int GetComputerName(StringBuilder IpBuffer, ref int nSize);

//Şimdi ise bir button ve bir textbox ekleyip click olayına şu kodları yazalım;

private void pcname_Click_1(object sender, EventArgs e)

{

StringBuilder str = new StringBuilder(128);

int sonuc, sayi;

sayi = str.Capacity;

sonuc = GetComputerName(str, ref sayi);

textBox1.Text = str.ToString();

}
</pre>
<p>Fonksiyonumuz birisi stringbuilder diğeri int tipinde 2 parametreye sahiptir ve geriye yine int tipinde bilgi göndermektedir. Kullanılan bilgisayarın bir adı olmasaydı, fonksiyon geriye 0 değeri döndürürdü.</p>
<p><strong>Duvar kağıdını değiştirmek: </strong>Windows’un SystemParametersInfo() isimli fonksiyonunu kullanarak duvar kağıdımızı değiştirebiliriz. Bu fonksiyonun farklı parametrelere sahip çok sayıda overlay versiyonu bulunmaktadır. Eğer biz sadece duvar kağıdını değiştiriceksek aşağıdaki gibi 4 parametreye sahip dll’imizi import etmeliyiz;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;user32.dll&quot;)]

public static extern int SystemParametersInfo(int uAction, int uParam, string IpvParam, int fuWinIni);
</pre>
<p>//Çok değişik amaçlarla kullanılan bu fonksiyonda sayısal değerler çok olduğundan akılda kalması kolay olan sabitler tanımlanıp kullanılması daha işlevsel olur. Bu yüzden fonksiyonu deklara ettikten sonra ayrıca da 2 sabit tanımladım;</p>
<p>public const int SPI_SETDESKWALLPAPER = 20;</p>
<p>public const int SPIT_UPDATEINIFILE = 0&#215;1;</p>
<p>//Windows projemizin formuna bir button ve bir openfiledialog kutusu nesnesi yerleştirip, buttonumuzun click olayına şunları yazalım;</p>
<p>private void btnwall_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>string dosya;</p>
<p>openFileDialog1.ShowDialog();</p>
<p>dosya = openFileDialog1.FileName;</p>
<p>int sonuc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, dosya, SPIT_UPDATEINIFILE);</p>
<p>}</p>
<p>[/c]<br />
<strong>CD sürücüsünü açmak:</strong> Gelelim en son API fonksiyonumuza. Programlamayla ilk haşır neşir olduğum zamanlarda, cd sürücüsünün kod yoluyla nasıl açıldığı en merak ettiğim işlemlerden biriydi. Sanki çok lüzumlu bir iş, buttona tıklamaktansa sürücü düğmesine tıklar açarım en azından vücud biraz hareket edip yağ deposu haline gelmez J Bu fonksiyon mciSendString() ile işlenir ve “winmm.dll” dosyasında tanımlıdır. C#.Net’e uyarlanmış hali için önce bir windows projesi açıp dll import işlemlerini gerçekleştiriyoruz;</p>
<pre class="brush: cpp; title: ; notranslate">
[DllImport(&quot;winmm&quot;)]

private static extern int mciSendString(string strCommand, StringBuilder strReturn, int iReturnLenght, IntPtr hwndCallback);

//Daha sonra formumuza bir button ekleyelim ve click olayına şu kodları yazalım;

private void button15_Click(object sender, EventArgs e)

{

IntPtr ptr;

ptr = IntPtr.Zero;

mciSendString(&quot;Set cdaudio door open&quot;, null, 0, ptr);

}
</pre>
<p><strong>kaynak : http://www.yagizgonuler.com/post/2008/08/13/API-Fonksiyonlarc4b1-ve-CNet-uzerinde-ornekleri.aspx</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/csharp-ornek-windows-apiler/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>C# : Windows API&#8217;ler</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-windows-apiler</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-windows-apiler#comments</comments>
		<pubDate>Sun, 30 May 2010 13:17:51 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# api]]></category>
		<category><![CDATA[c# api kullanımı]]></category>
		<category><![CDATA[c# cd sürücüsü açma]]></category>
		<category><![CDATA[c# cdrom open]]></category>
		<category><![CDATA[c# da api kullanımı]]></category>
		<category><![CDATA[c# da windows api kullanımı]]></category>
		<category><![CDATA[c# windows]]></category>
		<category><![CDATA[c# windows api]]></category>
		<category><![CDATA[c# windows apiler hakkında]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[csharp windows api]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2308</guid>
		<description><![CDATA[Hayırlı işler dilerim herkese. Bugün C#&#8217;da Windows tarafından sunulan API leri nasıl kullanabileceğimizi göstereceğim inş. Öncelikle API nedir ? API&#8217;nin açılımı ; Application Programmin Interface (Uygulama Programlama Arayüzü)dir. API&#8217;ler bize başka sistemlerle etkileşimi sağlar. Ben çok geniş almayacağım ele, C# da neden ihtiyaç duyulur bunu aktaracağım. Biz C# da herşeyi yapamıyoruz. Örneğin CD sürücüsünü kontrol [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="C#,C# windows api, csharp" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Windows APIler dot net c sharp " width="155" height="176" />Hayırlı işler dilerim herkese.<br />
Bugün C#&#8217;da Windows tarafından sunulan API leri nasıl kullanabileceğimizi göstereceğim inş.</p>
<p>Öncelikle API nedir ?</p>
<p>API&#8217;nin açılımı ; Application Programmin Interface (Uygulama Programlama Arayüzü)dir. API&#8217;ler bize başka sistemlerle etkileşimi sağlar. Ben çok geniş almayacağım ele, C# da neden ihtiyaç duyulur bunu aktaracağım. Biz C# da herşeyi yapamıyoruz.</p>
<p>Örneğin CD sürücüsünü kontrol edebileceğimiz bir yapı bulunmamaktadır .NET Framework da (Eğer varsa bile bunu yine temelde API ile sağlamaktadır.)  Yada faremiz yaptığımız bir uygulamanın üstündendeyken koordinatlarını alabiliriz, ne zaman ki formu gizledik o zaman işte biz farenin koordinatlarını alamayız. Ama Windows&#8217;un bize sağladağı API&#8217;ler ile bu bilgiye ulaşabiliriz.</p>
<p>API&#8217;ler her dilde kullanılır ancak her dilde kullanım şekli farklıdır.<br />
API&#8217;ler işletim sistemine göre farklılık gösterir. Bu duruma dikkat etmeniz gerekecektir.<br />
İhtiyaç duyduğunuz API&#8217;leri aratarak bulabilirsiniz, bunun için malesef pek kaynağınız yok(google hariç <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_biggrin.gif' alt="icon biggrin C# : Windows APIler dot net c sharp " class='wp-smiley' title="icon biggrin C# : Windows APIler dot net c sharp " />  )<span id="more-2308"></span></p>
<h4>API&#8217;nin Kullanımı ;</h4>
<pre class="brush: cpp; title: ; notranslate">
        [DllImport(&quot;winmm&quot;)]
        private static extern int mciSendString(string strCommand, StringBuilder strReturn, int iReturnLenght, IntPtr hwndCallback);

        void cdCikar()
        {
            //cd rom sürücüsü çıkıyor
            mciSendString(&quot;Set cdaudio door open&quot;, null, 0, IntPtr.Zero);
        }
</pre>
<p>DllImport sınıfını kullanabilmemiz için, using bloğuna</p>
<pre class="brush: cpp; title: ; notranslate">
using System.Runtime.InteropServices;
</pre>
<p>namespace&#8217;ini tanımlamız gerekiyor.</p>
<p><span style="color: #888888;">Şimdi ne yaptığımızı açıklayayım; </span></p>
<p>DllImport ile kullanmak istediğimiz dll in adını yazıyoruz. <span style="text-decoration: underline;">Hemen altına</span> ise extern ile genişleteceğimiz yeni bir metod tanımlıyoruz, bu tanımlamayı bulduğunuz API&#8217;e uygun halde tanımlamanız gerekiyor, alacağı parametre türleri vs.</p>
<p>Yukarıda kullandığımız API cd sürücümüzü açıyor. cdCikar() dediğimizde cd sürücüsünü çıkaracaktır. Windows API&#8217;lerini kullanabilmek için bunları bilmemiz yeterli.</p>
<p>Dediğim gibi API leri kendiniz bocalamayın framework un orasını burasını kurcalayıp, ihtiyaç duyduğunuz zaman Google&#8217;dan aratın, işletim sistemine dikkat edin yanlız. <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Windows APIler dot net c sharp " class='wp-smiley' title="icon smile C# : Windows APIler dot net c sharp " /><br />
Bir sonraki yazıda çeşitli birkaç API örneği vereceğim inş.</p>
<p>Hayırlı günler dilerim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-windows-apiler/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET &#8211; VS : Önişlemci Komutları</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/net-vs-onislemci-komutlari</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/net-vs-onislemci-komutlari#comments</comments>
		<pubDate>Sun, 16 May 2010 12:37:55 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c# önişlemci komutları]]></category>
		<category><![CDATA[önişlemci komutları]]></category>
		<category><![CDATA[visual studio define undef if endif else elif warnig error line region endregion]]></category>
		<category><![CDATA[visual studio önişlemci komutları]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2257</guid>
		<description><![CDATA[Hayırlı çalışmalar, Bugün Önişlemci nedir, nerede, neden kullanılır onu anlatmaya çalışacağım inş. Önişlemci Nedir ? Önişlemci komutları programın derleme zamanında derleyiciyi yönlendirmemize yarayan komutlardır.  İstemediğimiz satırların derleme modülü tarafından derlenmemesini sağlayabiliriz. Sadece bu değil, programda hata ayıklamak için ve kodun okunurluğunu arttırmak için de önişlemci komutları kullanılabilir. Komut çeşitleri; #define #undef #if #endif &#8211; #else [...]]]></description>
			<content:encoded><![CDATA[<p>Hayırlı çalışmalar,<br />
Bugün Önişlemci nedir, nerede, neden kullanılır onu anlatmaya çalışacağım inş.</p>
<h4>Önişlemci Nedir ?</h4>
<p>Önişlemci komutları programın derleme zamanında derleyiciyi yönlendirmemize yarayan komutlardır.  İstemediğimiz satırların derleme modülü tarafından derlenmemesini sağlayabiliriz. Sadece bu değil, programda hata ayıklamak için ve kodun okunurluğunu arttırmak için de önişlemci komutları kullanılabilir. Komut çeşitleri;</p>
<p>#define #undef<br />
#if #endif &#8211; #else #elif<br />
#line<br />
#warning #error<br />
#region #endregion</p>
<p><strong>Önemli not :</strong> C#&#8217;da aslında önişlemci diye bir birim yoktur, bu birim derleyicinin bir bölümü olarak görülmekte.</p>
<h4>#define #undef</h4>
<p>Bu komutlarla sembol ataması yapıyoruz, tek başına hiçbir görevi yoktur aslında ancak diğer önişlemci komutlarıyla özellikle #if komutuyla beraber kullanıldığında esas görevini görmekteyiz, #if ile kullanıldığında koşullu derleme yani istediğimiz bölümün derlenip istemediğimiz bölümün derlenmemesini sağlayabiliyoruz.</p>
<p>Kullanım şekli, kodun en üst kısmına yazılır şöyle ;<span id="more-2257"></span></p>
<pre class="brush: cpp; title: ; notranslate">
#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(&quot;Nurullah&quot;);
        }
    }
}
</pre>
<p>YENI sembolü tüm kaynak kodda geçerlidir çünkü #undef komutu ile kapatılmadı. Onu da şöyle yapıyoruz ;<br />
#undef YENI</p>
<p>Birden çok sembolde kullanabiliriz.</p>
<p>define komutunu tam olarak anlamamış olabilirsiniz ancak şimdi if yapısını gördüğünüzde daha iyi anlayacaksınız.</p>
<h4>#if #endif &#8211; #else #elif</h4>
<p>define komutu ile atadığımız sembolü kontrol ettirip, komutu uyguladığımız kod parçacığının derlenip derlenmemesini sağlıyoruz. Aşağıdaki kod parçacığını incelediğimiz de görebilirsiniz;</p>
<pre class="brush: cpp; title: ; notranslate">
#define ESKI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if YENI
            Console.WriteLine(&quot;Nurullah&quot;);
#endif
            Console.WriteLine(&quot;Demir&quot;);
            Console.ReadLine();
        }
    }
}
</pre>
<p>Burada ekrana</p>
<blockquote><p>Nurullah<br />
Demir</p></blockquote>
<p>yazacaktır,  çünkü YENI sembolü bulunmamaktadır. Şimdi de aşağıdaki kodu inceleyelim;</p>
<pre class="brush: cpp; title: ; notranslate">
#define ESKI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if YENI
            Console.WriteLine(&quot;Nurullah&quot;);
#elif ESKI
            Console.WriteLine(&quot;Demir&quot;);
            Console.WriteLine(&quot;Eski Sembolü&quot;);
#else
            Console.WriteLine(&quot;Bu kod derlenmeyecektir, çünkü ESKI sembolü çalıştırılmıştır, if-else if-else yapısı ile çalışma mantığı aynıdır.&quot;);
#endif
            Console.WriteLine(&quot;Burası ortak koddur, herhangi bir kontrol gerçekleştirmediğimizden derlenecektir.&quot;);
            Console.ReadLine();
        }
    }
}
</pre>
<p>Ekrana sadece</p>
<blockquote><p>Demir<br />
Eski Sembolü<br />
Burası ortak koddur, herhangi bir kontrol gerçekleştirmediğimizden derlenecektir.</p></blockquote>
<p>yazacaktır.<br />
Bu yapılarda mantıksal operatorleride kullanabiliriz<br />
#if YENI &amp;&amp; ESKI<br />
#if YENI ||ESKI<br />
#if YENI &amp;&amp; (!ESKI)<br />
#if YENI || (ESKI==FALSE)</p>
<p>son ikisi (!ESKI, ESKI==FALSE) ESKI sembolü tanımlanmamışsa anlamına gelir.</p>
<h4>#line</h4>
<p>Line komutu genelde hata ayıklamada kullanılır. Line komutunun iki kullanım çeşidi vardır<br />
1. #line 1<br />
Yukarıdaki kodu yazdığımız yerin bi altını 1. satır olarak kabul eder ve aşağıdaki satırlarıda ona göre düzenler.<br />
Örneğin aşağıda line komutunun alt satırını 4 olarak kabul edip, hata verdiğinde ona göre o satırı gösterir.</p>
<pre class="brush: cpp; title: ; notranslate">
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#line 4
            Console.WriteLine(hataliKodKullanimi);
            Console.ReadLine();
        }
    }
}
</pre>
<p>Yukarıda hata yapılan satır 8.satır iken, derleyici bize 4. satırda hata yapılmış gibi gösterir.<br />
Şöyle ;<br />
Error	1	The name &#8216;hataliKodKullanimi&#8217; does not exist in the current context	D:\Nurullah\Projeler\Visual Studio\Taslak\DenemeTahtasi\Console\Program.cs	3</p>
<p>#line komutunun diğer bir kullanımı ise ;<br />
#line 3 &#8220;Dosyamiz.cs&#8221;</p>
<p>Yine bir alt satırı 3. satır olarak kabul eder, hata verdiğinde #line komutunun altındaki tüm kodları &#8220;Dosyamiz.cs&#8221; dosyası içerisindeymiş gibi gösterir.</p>
<p>Şöyle ;<br />
The name &#8216;hataliKodKullanimi&#8217; does not exist in the current context	d:\Nurullah\Projeler\Visual Studio\Taslak\DenemeTahtasi\Console\Dosyamiz.cs	3</p>
<p>Dosyamiz.cs diye bir dosya yok aslında ama biz öyle yaptık <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_razz.gif' alt="icon razz .NET   VS : Önişlemci Komutları dot net c sharp " class='wp-smiley' title="icon razz .NET   VS : Önişlemci Komutları dot net c sharp " /> </p>
<h4>#error #warning</h4>
<p>İşte bu komutu çok seviyorum <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile .NET   VS : Önişlemci Komutları dot net c sharp " class='wp-smiley' title="icon smile .NET   VS : Önişlemci Komutları dot net c sharp " />  Ben genelde hatırlatma için kullanıyorum bunu.<br />
#error komutu ; derleme esnasında derleyicinin verdiği hatayı verdirmeye yarar.<br />
#warning komutu ; kodu derler ancak aşağıda uyarı verir.<br />
Bu komutlar yine if yapısıyla kullanıldığında güzel işler görmekte.<br />
Örnek kod ;</p>
<pre class="brush: cpp; title: ; notranslate">
#define ESKI
#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if ESKI &amp;&amp; YENI
    #error ESKI ve YENI sembolü aynı anda tanımlanamaz.
#endif
            Console.WriteLine(&quot;:)&quot;);
            Console.ReadLine();
        }
    }
}
</pre>
<p>Program derlenmeyecektir ve <strong><br />
Error	1	#error: &#8216;ESKI ve YENI sembolü aynı anda tanımlanamaz.&#8217; </strong><br />
şeklinde hata verecektir.<br />
Aşağıdaki kodu da inceleyiniz,</p>
<pre class="brush: cpp; title: ; notranslate">
#define ESKI
#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if ESKI &amp;&amp; YENI
    #warning ESKI ve YENI sembolü aynı anda tanımlanamaz.
#endif
            Console.WriteLine(&quot;:)&quot;);
            Console.ReadLine();
        }
    }
}
</pre>
<p>İşte bunu çok seviyorum <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile .NET   VS : Önişlemci Komutları dot net c sharp " class='wp-smiley' title="icon smile .NET   VS : Önişlemci Komutları dot net c sharp " />  Ben bunu hatırlatma amaçlı kullanıyorum genelde.<br />
Yukarıdaki program derlenecektir ancak<br />
#warning: &#8216;ESKI ve YENI sembolü aynı anda tanımlanamaz.&#8217;<br />
şeklinde uyarı verecektir.</p>
<h4>#region #endregion</h4>
<p>#region ve #endregion komutları arasına aldığımız satırları bir arada toplu olarak tutar.</p>
<p>Kullanımı ;</p>
<pre class="brush: cpp; title: ; notranslate">using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
            #region KODUMUZ
            Console.WriteLine(&quot;Nurullah DEMİR&quot;);
            Console.WriteLine(&quot;ndemir.com&quot;);
            Console.ReadLine();
            #endregion
        }
    }
}
</pre>
<p><img class="alignnone size-full wp-image-2266" title="region endregion" src="http://www.ndemir.com/wp-content/uploads/region-endregion1.jpg" alt="region endregion1 .NET   VS : Önişlemci Komutları dot net c sharp " width="337" height="250" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/net-vs-onislemci-komutlari/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# : Olay Oluşturma ve Asenkron Metod Örneği</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-olay-olusturma-ve-asenkron-metod-ornegi</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-olay-olusturma-ve-asenkron-metod-ornegi#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:35:06 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# access veritabanı örneği]]></category>
		<category><![CDATA[c# application]]></category>
		<category><![CDATA[c# asenkron metod örneği]]></category>
		<category><![CDATA[c# delegate örnek]]></category>
		<category><![CDATA[c# event olay örneği]]></category>
		<category><![CDATA[c# oledbconnection örnek]]></category>
		<category><![CDATA[c# özel mesaj uygulaması]]></category>
		<category><![CDATA[c# uygulama]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2147</guid>
		<description><![CDATA[Selamun Aleykum Cümleten, Son birkaç yazım ile ilgili basit bir örnek yapayım dedim döküman yazmak yerine. Programı kaba taslak özetliyeyim; veritabanında kullanıcıya mesajın olup olmadığını kontrol ediyor, event i butona tıkladıktan sonra gerçekleştiriyor. Biz isteseydik formun actived olayında da kurabilirdik. Diğer birşey ise ; DBKontrolLib.cs de bulunan 2 tane delegaete. Bundan biri (TemsilciHandler) olayımızın kullandığı [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Olay Oluşturma ve Asenkron Metod Örneği dot net c sharp " width="155" height="176" title="csharp C# : Olay Oluşturma ve Asenkron Metod Örneği dot net c sharp " />Selamun Aleykum Cümleten,</p>
<p>Son birkaç yazım ile ilgili basit bir örnek yapayım dedim döküman yazmak yerine.</p>
<p>Programı kaba taslak özetliyeyim; veritabanında kullanıcıya mesajın olup olmadığını kontrol ediyor, event i butona tıkladıktan sonra gerçekleştiriyor. Biz isteseydik formun actived olayında da kurabilirdik.</p>
<p>Diğer birşey ise ; DBKontrolLib.cs de bulunan 2 tane delegaete. Bundan biri (<span style="color: #888888;">TemsilciHandler</span>) olayımızın kullandığı delegate, diğeri ise (<span style="color: #888888;">AsynKontrolCalistirHandler</span>) olayımızı asenkron çalıştıracak bir delegate. Hatırlayacağınız üzere biz asenkron işlemlerini delegate üzerinden yapıyorduk. KontrolEt metodunu ise her dakikada bir defa (15. saniyede) çalışacak şekilde sonsuz bir döngüye soktuk.</p>
<p>MyEventArgs sınıfı nedir diye sorarsanız, .NET kütüphanesinde bulunan olayların çoğuna bakın object ve EventArgs türünde iki nesne vardır, bunun sebebi de kısaca şudur : olayın meydana geldiği andaki bilgilerin aktarılması. Yani oalyın gerçekleştiği an nerede ne, nasıl oldu vs. Biz MyEventArgs sınıfını veritabanında bulunan mesajları string türünde bir diziyle olaya bir metod atandığı zaman erişilebilsin diye yazdık. Form1.cs içerisinde bulabilirsiniz olayın gerçekleştiği anda ki bilgilere <span style="color: #888888;">e.mesaj</span> diyerek ulaştık tabi MyEventArgs sınıfında daha çok şey tanımlayabilirdik ama sade ve anlaşılır olsun diye basit birşeyler yapmak istedim.</p>
<p>Sınıf biraz daha geliştirilerek kullanıcı mesajları okuduktan sonra okundu olarak işlenebilir, tabi bizim amacımız delegate/olay/asenkron olduğu için bu kadarını yeterli gördüm.</p>
<p>Projeyi aşağıdan indirebilirsiniz.</p>
<p>[<a href="http://www.ndemir.com/.net/DBKontrol.rar" >PROJE</a>]</p>
<p><a href="http://www.ndemir.com/wp-content/uploads/c-örnek-uygulama.png" ><img class="size-full wp-image-2151 alignnone" title="c# örnek uygulama" src="http://www.ndemir.com/wp-content/uploads/c-örnek-uygulama.png" alt="c örnek uygulama C# : Olay Oluşturma ve Asenkron Metod Örneği dot net c sharp " width="392" height="136" /></a></p>
<p>İyi çalışmalar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-olay-olusturma-ve-asenkron-metod-ornegi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# : Asenkron Programlama &#8211; Thread, BeginInvoke vs.</title>
		<link>http://www.ndemir.com/_net/dot-net-c-sharp/c-asenkron-programlama</link>
		<comments>http://www.ndemir.com/_net/dot-net-c-sharp/c-asenkron-programlama#comments</comments>
		<pubDate>Thu, 25 Feb 2010 07:12:29 +0000</pubDate>
		<dc:creator>Nurullah</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[AsyncCallback]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# application]]></category>
		<category><![CDATA[c# asenkron metodlar]]></category>
		<category><![CDATA[c# asenkron mimarisi]]></category>
		<category><![CDATA[c# example]]></category>
		<category><![CDATA[c# thread kullanımı]]></category>
		<category><![CDATA[c# thread örneği]]></category>
		<category><![CDATA[c# thread sınıfı]]></category>

		<guid isPermaLink="false">http://www.ndemir.com/?p=2116</guid>
		<description><![CDATA[Selam herkese , öncelikle herkesin mevlid kandilini kutlarım. Bugün asenkron mimarisini inceleyeceğiz inş. Asenkron mimari nedir ? Süreçlerin bağımsız bir şekilde aynı anda devam etmesi şeklinde yorumlanmaktadır. C# da asenkron mimari yapısını uygulamak için genel anlamda kullanılan iki ana yapı mevcuttur. Thread Sınıfı Asenkron Metodlar (BeginInvoke, Stream.BeginRead vb) Bilgisayarlar aynı anda birden fazla işlem yapamaz, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://ndemir.com/img/csharp.png" alt="csharp C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " width="155" height="150" title="csharp C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " />Selam herkese , öncelikle herkesin mevlid kandilini kutlarım.<br />
Bugün asenkron mimarisini inceleyeceğiz inş.</p>
<p>Asenkron mimari nedir ?<br />
Süreçlerin bağımsız bir şekilde aynı anda devam etmesi şeklinde yorumlanmaktadır.</p>
<p>C# da asenkron mimari yapısını uygulamak için genel anlamda kullanılan iki ana yapı mevcuttur.</p>
<ol>
<li>Thread Sınıfı</li>
<li>Asenkron Metodlar (BeginInvoke, Stream.BeginRead vb)</li>
</ol>
<p>Bilgisayarlar aynı anda birden fazla işlem yapamaz, nasıl yapamaz ? Şöyle ki ; Biz her ne kadar word de bir yazı yazıyor ve winampta şarkı dinliyorken her iki işlemi biz her ne kadar aynı anda yapıyormuş gibi algılasakta değildir, yaptığımız bu işlemler sırasıyla yapılmaktadır. Toplam işlemler iş parçacıklarına bölünerek sırasıyla yapılır.</p>
<p>Bizde normal şartlar altında bir müdahelede bulunmadığımız sürece programlarımız senkron çalışır, yani kodu okur görevini yerine getirdikten sonra bir alt satırdaki kod ile devam eder. Asenkron programlama ile biz programımız bir şeyi yaparken onunla beraber başka şeyler yapmasını isteriz. Bunuda işlemleri parçacıklara bölerek gerçekleştirir bir ondan bir bundan, bir ondan bir bundan <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " class='wp-smiley' title="icon smile C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " /><br />
<span id="more-2116"></span></p>
<pre class="brush: cpp; title: ; notranslate">
            while (DateTime.Now.Second != 30)
            {
                this.Text = DateTime.Now.Second.ToString();
            }
            MessageBox.Show(&quot;Test&quot;);
</pre>
<p>Burada saniye 30 olduktan sonra döngüden çıkılacaktır, biz bunu beklemek zorunda değiliz bu yüzden hem metodu hemde uyarıyı aynı anda çalıştırmak isteriz.<br />
Önce asenkron metodlardan başlamak istiyorum.</p>
<h3>Asenkron Metodlar</h3>
<p>Bu yöntemde biz delegate kullanacağız.<br />
Programımızda butona bastıktan sonra Test diye uyarı versin ve formun başlığını her saniye değiştirsin.<br />
Döngü içerisindeyken çalıştırmak istediğimiz metodun içeriği aşağıdaki şekilde olsun;</p>
<pre class="brush: cpp; title: ; notranslate">
            while (DateTime.Now.Second != 30)
            {
                this.Text = DateTime.Now.Second.ToString();
            }
</pre>
<p>Şimdi delegate i tanımlayalım;</p>
<pre class="brush: cpp; title: ; notranslate">
public delegate void IslemHandler();
</pre>
<p>Butonun click olayına aşağıdaki kodları yazalım;</p>
<pre class="brush: cpp; title: ; notranslate">
        private void button1_Click(object sender, EventArgs e)
        {
            IslemHandler islem = new IslemHandler(metodumuz);
            islem.BeginInvoke(new AsyncCallback(islemSonlandi), this);

        }
</pre>
<p>Burada BeginInvoke metodu ile gerçekleştiriyoruz yapmak istediğimizi, bu metodu kullanırken bizden AsyncCallback türünde bir delegate istiyor, biz delegate i metod içerisinde kuruyoruz, kurduğumuz bu metod içerisinde bizden IAsyncResult türünde bir parametra alan ve geri dönüş tipi void olan bir metod istemektedir, istemesinin nedeni de şu ; bu işlem parçacığı bittiği zaman belirttiğimiz bu metod çalışacaktır, bu yüzden bu tanımlamayı yaparken ek olarak bir metod yazmamız gerekecek, mesela işlem bittiğinde &#8220;İşlem bitti&#8221; diye uyarı versin.<br />
2. istediği bir parametre ise object türünde herhangi birşey, null olarak ta gönderebilirdik ama ben formun o anki başlığını ekrana yazdıracağım bu yüzden formun kendisini gönderdim.</p>
<pre class="brush: cpp; title: ; notranslate">
        void islemSonlandi(IAsyncResult ia)
        {
            Form1 frm = (Form1)ia.AsyncState;
            MessageBox.Show(frm.Text + &quot;\nİşlem sonlandı&quot;);
        }
</pre>
<p>Bizden object türünde bir nesne istemişti ve biz this yani formun kendisini göndermiştk, ia.AsyncState ile bize gelen nesneye ulaşıyoruz, yani AsyncState metodu bize BeginInvoke ile gönderdiğimiz nesneyi geri gönderiyor.</p>
<p>Son olarak ta formun load olayına aşağıdaki kodu yazıyoruz ;</p>
<pre class="brush: cpp; title: ; notranslate">
CheckForIllegalCrossThreadCalls = false;
</pre>
<p>Eğer bunu yazmazsak yaptığımız işlemler çalışmayacak ve hata verecektir. program.cs içerisinde Application.Run(new Form1); ile formu çalıştıran bir process var, normalde aynı anda iki process aynı şeyi kullanamaz biz yukarıdaki tanımlamayı yaparak bunu yoksaymasını istiyoruz.<br />
Programı çalıştırıp butona bastığımızda hem uyarı verip hemde formun başlığının değiştirildiğini göreceksiniz. Ve işlem bittiğinde ayrı bir uyarı.<br />
Projeyi en altta verdiğim linkten indirebilirsiniz.</p>
<h3>Thread Sınıfı</h3>
<p>Thread sınıfının kullanılması daha hoş. Thread, iş parçacıklarıdır.</p>
<p>Çalıştırmak istediğimiz metod ;</p>
<pre class="brush: cpp; title: ; notranslate">
        void islemYap()
        {
            while (DateTime.Now.Second != 52)
            {
                this.Text = DateTime.Now.ToString();

            }
        }
</pre>
<p>Buton click olayına da aşağıdaki kodu yazıyoruz; </p>
<pre class="brush: cpp; title: ; notranslate">
            Thread islem = new Thread(new ThreadStart(islemYap));
            islem.Start();
</pre>
<p>Burada Thread sınıfından yararlanıyoruz, Thread sınıfını kurarken constructor olarak ThreadStart sınıfı istiyor ve ThreadStart sınıfı da çalıştırmasını istediğimiz metodu istiyor<br />
Thread çok kapsamlı, çok pratik yapılması gereken bir konu. Özünde AsynCallback temelini kullanan bir yapı.<br />
Thread sınıfı içerisinde güzel metodlar var birkaçı ;<br />
Suspend : işlemi dondurur.<br />
Resume : dondurduğumuz işlemi devam ettirir.<br />
Priority : işlemin önceliğini arttırır azaltabilmemiz için kullanılan ayrı bir metod.</p>
<p>Proje içerisinde ayrı birkaç şey açıkladım.<br />
<a rel="nofollow" href="http://www.ndemir.com/cikis/http://ndemir.com/.net/AsenkronAPP.rar" >[PROJE]</a><br />
Okula gitmek zorundayım sanırım 5-10 dk geç kaldım <img src='http://www.ndemir.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " class='wp-smiley' title="icon smile C# : Asenkron Programlama   Thread, BeginInvoke vs. dot net c sharp " /><br />
Hayırlı çalışmalar dilerim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ndemir.com/_net/dot-net-c-sharp/c-asenkron-programlama/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

