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;
}
}
}
Hiç yorum yok :
Yorum Gönder