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.
}
}
}