Kaydol:
Kayıt Yorumları
(
Atom
)
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. } } }
Hiç yorum yok :
Yorum Gönder