Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

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

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,114
  • MFC Puanı
    10
  • MFC Seviyesi

Kod:
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 **** 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         /// 
        **** 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         /// 
        **** 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 **** DelegateStandardPattern();
        private **** SetTextStandardPattern()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPattern(SetTextStandardPattern));
                return;
            }
            this.Text = "New Text";
        }
        private **** 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.
        }
    }
}
 
Üst Alt