ThreadStart Sınıfı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ThreadStart Sınıfı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Ocak 2014 Cuma

C Sharp Form Uygulamalar Thread Kullanarak Pastacı ve Tedarikçi Arasında İşlemler Yaptırma



KONU : C Sharp Uygulamalar - C Sharp ( C# ). Üç farklı pastacının elinde pasta yapmak için gerekli malzemelerden (un, yağ ve şeker) sadece bir tanesi mevcut olsun. Tedarikçinin elinde ise bu malzemelerden sonsuz olmasına rağmen her dağıtımda sadece 2 farklı malzeme sağlamakta (yağ+un, yağ+şeker veya un+yağ). Tedarikci ve pastacılar için birer process veya thread oluşturun (toplam 4 tane). Tedarikçi her dağıtımda elinde diğer malzemeyi tutan pastacıyı uyandıracak. Örneğin un ve yağ dağıtımı yapıyorsa, elinde şeker olan pastacıyı uyandıracak. Her pastacıda pasta yapabilmek tedarikçiyi uyandıracak ve gerekli malzemeleri dağıtılmasını bekleyecek. Bütün pastacılar belli sayıda pasta yaptığında (her pastacı için farklı olabilir), program sonlanacak. Tedarikçi her dağıtımda bir pasta yapımına yetecek kadar malzeme sağlamakta. Programı açıklayacak ekran çıktıları oluşturun (Soru 1’de verilen örnek çalışma gibi) ve farklı pasta sayıları için programı çalıştırarak sonuçları yorumlayın. İp ucu: Bu soru için üretici/tüketici problemini göz önüne alabilirsiniz.
ETİKETLER: c sharp groupbox - c sharp timer - c sharp thread - c sharp threadstart - c sharp form - c sharp multi thread





UYGULAMAYI İNDİR



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace C_Sharp_Form_Tedarikci_Pastacilar_Thread
{
    public partial class Form1 : Form
    {
        public delegate void IslemDelegateHandler();
        public IslemDelegateHandler islemDelegatePasta1;
        Thread threadPasta1 = null;
        public IslemDelegateHandler islemDelegatePasta2;
        Thread threadPasta2 = null;
        public IslemDelegateHandler islemDelegatePasta3;
        Thread threadPasta3 = null;
        public IslemDelegateHandler islemDelegateTedarikci;
        Thread threadTedarikci = null;
        int counterPasta=0;
        int counterTedarik = 0;
        int pasta1Sure = 0;
        int pasta2Sure = 0;
        int pasta3Sure = 0;
        int tedarikciSure = 0;
        int pasta1adet = 0;
        int pasta2adet = 0;
        int pasta3adet = 0;
        int pasta1UretilenAdet = 0;
        int pasta2UretilenAdet = 0;
        int pasta3UretilenAdet = 0;
        bool pasta1Uretilebilir = false;
        bool pasta2Uretilebilir = false;
        bool pasta3Uretilebilir = false;
        bool tedarikYapilsin = false;
        bool unYagIste = false;
        bool unSekerIste = false;
        bool sekerYagIste = false;

        bool unYagIsteAktif = false;
        bool unSekerIsteAktif = false;
        bool sekerYagIsteAktif = false;
        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            islemDelegatePasta1 = new IslemDelegateHandler(Pasta1Islemleri);
            islemDelegatePasta2 = new IslemDelegateHandler(Pasta2Islemleri);
            islemDelegatePasta3 = new IslemDelegateHandler(Pasta3Islemleri);
            islemDelegateTedarikci = new IslemDelegateHandler(TedarikciIslemleri);

            ParameterizedThreadStart threadDelegatePasta1 = new ParameterizedThreadStart(this.ThreadFuncPasta1);
            threadPasta1 = new System.Threading.Thread(threadDelegatePasta1);
            threadPasta1.IsBackground = true;
            threadPasta1.Start(null);

            ParameterizedThreadStart threadDelegatePasta2= new ParameterizedThreadStart(this.ThreadFuncPasta2);
            threadPasta2 = new System.Threading.Thread(threadDelegatePasta2);
            threadPasta2.IsBackground = true;
            threadPasta2.Start(null);


            ParameterizedThreadStart threadDelegatePasta3 = new ParameterizedThreadStart(this.ThreadFuncPasta3);
            threadPasta3 = new System.Threading.Thread(threadDelegatePasta3);
            threadPasta3.IsBackground = true;
            threadPasta3.Start(null);

            ParameterizedThreadStart threadDelegateTedarikci = new ParameterizedThreadStart(this.ThreadFuncTedarikci);
            threadTedarikci = new System.Threading.Thread(threadDelegateTedarikci);
            threadTedarikci.IsBackground = true;
            threadTedarikci.Start(null);
        }

        private AutoResetEvent waitHandle = new AutoResetEvent(true);

        public void ThreadFuncPasta1(object parameter)
        {
            // While this mode is selected
            while (true)
            {
                if (progressBarPasta1Seker.Value != 0 && progressBarPasta1Un.Value != 0 && progressBarPasta1Yag.Value != 0)
                {
                    pasta1Uretilebilir = true;
                }
                else
                {
                    pasta1Uretilebilir = false;
                }

                // Waiting for Receive-Event
                if (waitHandle.WaitOne(50) && pasta1Uretilebilir)
   
                    this.Invoke(islemDelegatePasta1);
            }
        }

        public void ThreadFuncPasta2(object parameter)
        {
            // While this mode is selected
            while (true)
            {
                if (progressBarPasta2Seker.Value != 0 && progressBarPasta2Un.Value != 0 && progressBarPasta2Yag.Value != 0)
                {
                    pasta2Uretilebilir = true;
                }
                else
                {
                    pasta2Uretilebilir = false;
                }

                // Waiting for Receive-Event
                if (waitHandle.WaitOne(50) && pasta2Uretilebilir)

                    this.Invoke(islemDelegatePasta2);
            }
        }

        public void ThreadFuncPasta3(object parameter)
        {
            // While this mode is selected
            while (true)
            {
                if (progressBarPasta3Seker.Value != 0 && progressBarPasta3Un.Value != 0 && progressBarPasta3Yag.Value != 0)
                {
                    pasta3Uretilebilir = true;
                }
                else
                {
                    pasta3Uretilebilir = false;
                }

                // Waiting for Receive-Event
                if (waitHandle.WaitOne(50) && pasta3Uretilebilir)

                    this.Invoke(islemDelegatePasta3);
            }
        }

        public void ThreadFuncTedarikci(object parameter)
        {
            // While this mode is selected
            while (true)
            {

                if (unYagIste || unSekerIste || sekerYagIste)
                {
                    tedarikYapilsin = true;
                }
                else
                {
                    tedarikYapilsin = false;
                }
                // Waiting for Receive-Event
                if (waitHandle.WaitOne(50) && tedarikYapilsin)

                    this.Invoke(islemDelegateTedarikci);
            }
        }

        private void Pasta1Islemleri()
        {
            if (pasta1Sure == 0)
            {
                pasta1Sure = counterPasta;
            }
            else 
            {
                int value = counterPasta - pasta1Sure;
                if (value < 100)
                {
                    progressPasta1.Value = value;
                    progressBarPasta1Yag.Value = 100 - value;
                    progressBarPasta1Seker.Value = 100 - value;
                }
                else
                {
                    pasta1UretilenAdet += 1;
                    lblPasta1Uretilen.Text = pasta1UretilenAdet.ToString();
                    progressPasta1.Value = 0;
                    pasta1Sure = 0;
                    progressBarPasta1Yag.Value = 0;
                    progressBarPasta1Seker.Value = 0;

                    if (pasta1adet != pasta1UretilenAdet)
                    {
                        sekerYagIste = true;
                    }
                }
                  
            }
        }

        private void Pasta2Islemleri()
        {
            if (pasta2Sure == 0)
            {
                pasta2Sure = counterPasta;
            }
            else
            {
                int value = counterPasta - pasta2Sure;
                if (value < 100)
                {
                    progressPasta2.Value = value;
                    progressBarPasta2Un.Value = 100 - value;
                    progressBarPasta2Seker.Value = 100 - value;
                }
                else
                {
                    pasta2UretilenAdet += 1;
                    lblPasta2Uretilen.Text = pasta2UretilenAdet.ToString();
                    progressPasta2.Value = 0;
                    pasta2Sure = 0;
                    progressBarPasta2Un.Value = 0;
                    progressBarPasta2Seker.Value = 0;

                    if (pasta2adet != pasta2UretilenAdet)
                    {
                        unSekerIste = true;
                    }
                }
            }
        }

        private void Pasta3Islemleri()
        {
            if (pasta3Sure == 0)
            {
                pasta3Sure = counterPasta;
            }
            else
            {
                int value = counterPasta - pasta3Sure;
                if (value < 100)
                {
                    progressPasta3.Value = value;
                    progressBarPasta3Un.Value = 100 - value;
                    progressBarPasta3Yag.Value = 100 - value;
                }
                else
                {
                    pasta3UretilenAdet += 1;
                    lblPasta3Uretilen.Text = pasta3UretilenAdet.ToString();
                    progressPasta3.Value = 0;
                    pasta3Sure = 0;
                    progressBarPasta3Un.Value = 0;
                    progressBarPasta3Yag.Value = 0;

                    if (pasta3adet != pasta3UretilenAdet)
                    {
                        unYagIste = true;
                    }
                }
            }
        }

        private void TedarikciIslemleri()
        {

            if (tedarikciSure == 0)
            {
                tedarikciSure = counterTedarik;
            }
            else
            {
                int value = counterTedarik - tedarikciSure;

                int ister = 0;

                if (unYagIste && !unSekerIsteAktif && !sekerYagIsteAktif )
                {
                    ister = 3;
                    unYagIsteAktif = true;
                    lblTedarikciDurum.Text = "3. Pastacı için tedarik sağlanıyor";
                }
                else if (unSekerIste && !unYagIsteAktif && !sekerYagIsteAktif)
                {
                    ister = 2;
                    unSekerIsteAktif = true;
                    lblTedarikciDurum.Text = "2. Pastacı için tedarik sağlanıyor";
                }
                else if (sekerYagIste && !unSekerIsteAktif && !unYagIsteAktif)
                {
                    ister = 1;
                    sekerYagIsteAktif = true;
                    lblTedarikciDurum.Text = "1. Pastacı için tedarik sağlanıyor";
                }

                    switch (ister)
                    {
                        case 1:
                            if (value < 100)
                            {
                                progressBarTedatikciSeker.Value = value;
                                progressBarTedatikciYag.Value = value;
                            }
                            else
                            {
                                progressBarTedatikciSeker.Value = 100;
                                progressBarTedatikciYag.Value = 100;

                                progressBarPasta1Seker.Value = 100;
                                progressBarPasta1Yag.Value = 100;
                                sekerYagIsteAktif = false;
                                sekerYagIste = false;
                                tedarikciSure = 0;

                                lblTedarikciDurum.Text = "Talep bekliyor...";
                            }
                            break;

                        case 2:
                            if (value < 100)
                            {
                                progressBarTedatikciSeker.Value = value;
                                progressBarTedatikciUn.Value = value;
                            }
                            else
                            {
                                progressBarTedatikciSeker.Value = 0;
                                progressBarTedatikciUn.Value = 0;

                                progressBarPasta2Seker.Value = 100;
                                progressBarPasta2Un.Value = 100;
                                unSekerIsteAktif = false;
                                unSekerIste = false;
                                tedarikciSure = 0;
                                lblTedarikciDurum.Text = "Talep bekliyor...";
                            }
                            break;

                        case 3:
                            if (value < 100)
                            {
                                progressBarTedatikciYag.Value = value;
                                progressBarTedatikciUn.Value = value;
                            }
                            else
                            {
                                progressBarTedatikciYag.Value = 0;
                                progressBarTedatikciUn.Value = 0;

                                progressBarPasta3Yag.Value = 100;
                                progressBarPasta3Un.Value = 100;
                                unYagIsteAktif = false;
                                unYagIste = false;
                                tedarikciSure = 0;
                                lblTedarikciDurum.Text = "Talep bekliyor...";
                            }
                            break;
                        default:
                            break;
                    }

            }
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            counterPasta++;
            counterTedarik += 2;
            waitHandle.Set();
        }



        private void btnAdetGirPasta1_Click(object sender, EventArgs e)
        {
            try
            {
                pasta1adet = int.Parse(txtPasta1Adeti.Text);

                lblPasta1Uretilecek.Text = pasta1adet.ToString();

                if (pasta1adet > pasta1UretilenAdet)
                {
                    sekerYagIste = true;
                }
            }
            catch (Exception)
            {

            }
        }

        private void btnAdetGirPasta2_Click(object sender, EventArgs e)
        {
            try
            {
                pasta2adet = int.Parse(txtPasta2Adeti.Text);

                lblPasta2Uretilecek.Text = pasta2adet.ToString();

                if (pasta2adet > pasta2UretilenAdet)
                {
                    unSekerIste = true;
                }
            }
            catch (Exception)
            {

            }
        }

        private void btnAdetGirPasta3_Click(object sender, EventArgs e)
        {
            try
            {
                pasta3adet = int.Parse(txtPasta3Adeti.Text);

                lblPasta3Uretilecek.Text = pasta3adet.ToString();


                if (pasta3adet > pasta3UretilenAdet)
                {
                    unYagIste = true;
                }
            }
            catch (Exception)
            {

            }
        }
    }
}

UYGULAMAYI İNDİR

18 Ocak 2014 Cumartesi

C Sharp Form Uygulamalar N Tane Sayının Toplamını Çoklu Process İle Hesaplama (Parametreli Thread)



KONU : C Sharp Uygulamalar - C Sharp ( C# ) N tane sayının toplamını çoklu process kullanarak hesaplayan bir porgram yazın. Sayıların tutulduğu bütün sayılara ulaşabilen k tane process oluşturun . Her bir process diziden iki sayı alsın ve bunları toplayarak genel toplamın tutulduğu değişkenin değerini güncellesin. Dizini bütün elemanları genel toplama eklendiğinde, program sonlansın. (Not : parametreli thread kullanılarak yapıldı.)
ETİKETLER:c sharp process - c sharp thread - c sharp çoklu parçacık - c# thread oluşturma





UYGULAMAYI İNDİR


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Threading;

namespace C_Sharp_Form_Coklu_Is_Parcacık_Olusturma
{
    public partial class FormThread : Form
    {
        public delegate void DelegateStandardPattern(int threadNo, int birinciSayi, int ikinciSayi);
        public delegate void DelegateStandardPatternSonuc();
        List sayilar = new List();
        ParameterizedThreadStart pthreadstart = null;
        Thread thread = null;
        int toplam;


        public FormThread()
        {
            InitializeComponent();
            this.Text = "Çoklu  İş Parçacığı Kullanarak Toplama İşlemi Yapma";
            //multi tread yaparken karşılan problem
            //Cross call hatası almamak için invoke ile fonksiyorun tekrar çağıracağım
        }

        private void Topla(int threadNo, int birinciSayi, int ikinciSayi)
        {
            if (this.InvokeRequired)
            {
                  this.Invoke(new DelegateStandardPattern(Topla), threadNo, birinciSayi, ikinciSayi);
            }
            else
            {
                try
                {
                    toplam = toplam + Convert.ToInt32(birinciSayi) + Convert.ToInt32(ikinciSayi);
                    lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} ve {2} sayılarını topluyor : toplam = toplam + {1} + {2}", Convert.ToInt32(threadNo), Convert.ToInt32(birinciSayi), Convert.ToInt32(ikinciSayi)));
                }
                catch (Exception)
                {

                }
            }

 
                SonucuGuncelle();
          
        }

        private void SonucuGuncelle()
        {
            if (lblToplama.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPatternSonuc(SonucuGuncelle));
            }
            else
            {
                lblToplama.Text = toplam.ToString();
            }
        }

        private void btnListeyiTemizle_Click(object sender, EventArgs e)
        {
            lstSayilar.Items.Clear();
            lstToplamSonucu.Items.Clear();
            sayilar.Clear();
        }

        private void btnSayiyiGir_Click(object sender, EventArgs e)
        {
            try
            {
                int sayi = Convert.ToInt32(txtSayiGir.Text);
                lstSayilar.Items.Add(sayi);
                sayilar.Add(sayi);
                txtSayiGir.Text = "";
                txtSayiGir.Focus();
            }
            catch (Exception)
            {

            }
        }

        private void btnToplamaYap_Click(object sender, EventArgs e)
        {
            if (lstSayilar.Items.Count < 1) return;

            ThreadStart ts;

            try
            {
                for (int i = 0; i < lstSayilar.Items.Count; i = i + 2)
                {
                    if (lstSayilar.Items.Count - 1 == i)
                    {
                        ts = delegate() { Topla(i / 2 + 1, sayilar[i], 0); };
                    }
                    else
                    {
                        ts = delegate() { Topla(i / 2 + 1, sayilar[i], sayilar[i + 1]); };
                    }


                    thread = new Thread(ts);
                    thread.Start();
                    Thread.Sleep(200);
                    ts = null;
                }
            }
            catch (Exception)
            {

            }
        }

        private void FormThread_Load(object sender, EventArgs e)
        {
            lblToplama.Text = toplam.ToString();
            this.AcceptButton = btnSayiyiGir;
        }
    }
}


UYGULAMAYI İNDİR

C Sharp Form Uygulamalar N Tane Sayının Toplamını Çoklu Process İle Hesaplama



KONU : C Sharp Uygulamalar - C Sharp ( C# ) N tane sayının toplamını çoklu process kullanarak hesaplayan bir porgram yazın. Sayıların tutulduğu bütün sayılara ulaşabilen k tane process oluşturun . Her bir process diziden iki sayı alsın ve bunları toplayarak genel toplamın tutulduğu değişkenin değerini güncellesin. Dizini bütün elemanları genel toplama eklendiğinde, program sonlansın.
ETİKETLER: c sharp process - c sharp thread - c sharp çoklu parçacık - c# thread oluşturma





UYGULAMAYI İNDİR



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Threading;

namespace C_Sharp_Form_Coklu_Is_Parcacık_Olusturma
{
    public partial class FormThread : Form
    {
        public delegate void DelegateStandardPattern(object threadNo);
        List sayilar = new List();
        ParameterizedThreadStart pthreadstart = null;
        Thread thread = null;
        ThreadStart ts;
        int toplam;
        int indeks = 0;
        bool sonucYazildiMi = false;

        public FormThread()
        {
            InitializeComponent();
            this.Text = "Çoklu  İş Parçacığı Kullanarak Toplama İşlemi Yapma";
            //multi tread yaparken karşılan problem
            //Cross call hatası almamak için invoke ile fonksiyorun tekrar çağıracağım
        }
        
        private void Topla(object threadNo )
        {
            if (lstToplamSonucu.InvokeRequired)
            {
                lstToplamSonucu.Invoke(new DelegateStandardPattern(Topla), threadNo);
            }
            else
            {
                try
                {               //toplanacak sayı varsa toplam işlemine devam et
                    if (indeks < sayilar.Count && sayilar.Count - 1 != indeks)
                    {
                        toplam = toplam +  sayilar[indeks] + sayilar[indeks + 1];
                        lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} ve {2} sayılarını topluyor : toplam = toplam + {1} + {2}", Convert.ToInt32(threadNo), sayilar[indeks], sayilar[indeks + 1]));
                        indeks += 2;


                    }
                    else if (indeks < sayilar.Count && sayilar.Count % 2 == 1)
                    {
                        toplam = toplam + sayilar[indeks];
                        lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} sayılarını topluyor : toplam = toplam + {1} ", Convert.ToInt32(threadNo), sayilar[indeks]));
                        indeks += 1;

                    }
 
                    if (indeks == sayilar.Count&& !sonucYazildiMi)
                    {
                             lstToplamSonucu.Items.Add("Toplam  = " + toplam.ToString());
                             sonucYazildiMi = true;
                    }


                }
                catch (Exception)
                {

                }
            }
        }




        private void btnListeyiTemizle_Click(object sender, EventArgs e)
        {
            lstSayilar.Items.Clear();
            lstToplamSonucu.Items.Clear();
            sayilar.Clear();
            toplam = 0;
            indeks = 0;
            sonucYazildiMi = false;
        }

        private void btnSayiyiGir_Click(object sender, EventArgs e)
        {
            try
            {
                int sayi = Convert.ToInt32(txtSayiGir.Text);
                lstSayilar.Items.Add(sayi);
                sayilar.Add(sayi);
                txtSayiGir.Text = "";
                txtSayiGir.Focus();
            }
            catch (Exception)
            {

            }
        }

        private void btnToplamaYap_Click(object sender, EventArgs e)
        {
            if (lstSayilar.Items.Count < 1) return;

            indeks = 0;
            toplam = 0;
            sonucYazildiMi = false;

            try
            {
                for (int i = 0; i < lstSayilar.Items.Count/2+1;i++ )
                {
                 
                    pthreadstart = new ParameterizedThreadStart(Topla);
                    thread = new Thread(pthreadstart);
                    thread.Start(i+1);
                }
            }
            catch (Exception)
            {

            }
        }

        Random rastgele = new Random();

        private void btnSayiOlustur_Click(object sender, EventArgs e)
        {
            int sayi =0;
            for (int i = 0; i < 1000; i++)
            {
                sayi = rastgele.Next(0, 10000);
                sayilar.Add(sayi);
                lstSayilar.Items.Add(sayi);
            }
        }

        private void FormThread_Load(object sender, EventArgs e)
        {

        }

 
    }
}

UYGULAMAYI İNDİR

18 Mart 2013 Pazartesi

C Sharp Form Uygulamalar Çoklu İş Parçacığı Oluşturma



KONU : C Sharp ( C# ) Form Uygulamalar çoklu iş parçacığı oluşturma, cross thread problemini giderme, C sharp aynı anda aynı kontrolü kullanan başka bir thread başlatma, Cross thread sorununu kontrolün invoke methodu ve delegate kullanarak çözme, C sharp multithread oluşturma.



C Sharp Form Uygulamalar Çoklu İş Parçacığı Oluşturma, CrossThread Önleme, MultiThread Oluşturma

UYGULAMAYI İNDİR



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace C_Sharp_Form_Coklu_Is_Parcacık_Olusturma
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //iki farklı thread 
        Thread thread1, thread2;

        bool threadBasladi = false;
        private void button1_Click(object sender, EventArgs e)
        {
            if (threadBasladi)
            {
                thread1.Abort();
                thread2.Abort();
            }
            threadBasladi = true;
            //thread lerin başladığında çalışacak olan methodlar
            ThreadStart threadstart1 = new ThreadStart(sayMethod1);
            ThreadStart threadstart2 = new ThreadStart(sayMethod2);
            //thread leri oluşturma
            thread1 = new Thread(threadstart1);
            thread2 = new Thread(threadstart2);
            //thread isimleri
            thread1.Name = "Thread 1";
            thread2.Name = "Thread 2";
            //threadlere verilen öncelik(thread priority)
            thread1.Priority = ThreadPriority.Normal;
            thread2.Priority = ThreadPriority.Normal;
            //Thread verilebilecek öncelikler:
            //ThreadPriority.AboveNormal;
            //ThreadPriority.BelowNormal;
            //ThreadPriority.Highest;
            //ThreadPriority.Lowest;
            //ThreadPriority.Normal;
           
            //Thread leri başlatma
            thread1.Start();
            thread2.Start();
        }

        ///          /// Birinci Thread ile başlatılan method, Cross Thread olayını önlemek için invoke ile method         ///  uygun olana kadar tekrar çağırılır         /// 
        void sayMethod1()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPattern(sayMethod1));

            }
            else
            {
                for (int i = 0; i < 1000; i++)
                {
                    listBox1.Items.Add(thread1.Name + " - " + i);
                }
            }
        }

        ///          /// İkinci Thread ile başlatılan method, Cross Thread olayını önlemek için invoke ile method         ///  uygun olana kadar tekrar çağırılır         /// 
        void sayMethod2()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPattern(sayMethod2));

            }
            else
            {
                for (int i = 0; i < 1000; i++)
                {
                    listBox1.Items.Add(thread2.Name + " - " + i);
                }
            }
        }

        public delegate void DelegateStandardPattern();
        private void SetTextStandardPattern()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPattern(SetTextStandardPattern));
                return;
            }
            this.Text = "New Text";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //multi tread yaparken karşılan problem
            //Cross call hatası almamak için => bu değer false yapılır
            //Çapraz iş parçacığı işlemi geçerli değil: 'listBox1'              
            //denetimine oluşturulduğu iş parçacığı dışında başka bir           
            //iş parçacığından erişildi.
            //CheckForIllegalCrossThreadCalls = false;

            // Ama bu doğru işlem değildir.
            // Uygun bir patern kullanılmalıdır. Yukarıdaki gibi kontrol invoke methodu ile 
            //işlem yapılacak method tekrar çağırılır.
        }
    }
}



UYGULAMAYI İNDİR