private int[] valueArray;
private Random randonNumber = new Random();
private static volatile bool sraped = true;
private DateTime startTime;
private DateTime endTime;
private static volatile string strng = String.Empty;
private Hashtable treadHolder = new Hashtable();
private static long treadCounter = 0;
private string ThreadAndTime;
private string OutTxt;
private System.Windows.Forms.Label lbSort;
private System.Windows.Forms.Label lbMsg;
private void SetCombox()
{
DataTable dtNumber = new DataTable();
dtNumber.Columns.Add("ID");
dtNumber.Columns.Add("NAME");
for (int i = 0; i < 3; i++)
{
DataRow drNew = dtNumber.NewRow();
drNew["ID"] = i;
if (i==0)
{
drNew["NAME"] = 100;
}
else if(i==1)
{
drNew["NAME"] = 1000;
}
else if(i==2)
{
drNew["NAME"] = 10000;
}
dtNumber.Rows.Add(drNew);
}
DataTable dtThread = dtNumber.Clone();
for (int i = 0; i < 3; i++)
{
DataRow drRow = dtThread.NewRow();
drRow["ID"] = i;
if (i==0)
{
drRow["NAME"] = 1;
}
else if(i==1)
{
drRow["NAME"] = 10;
}
else if(i==2)
{
drRow["NAME"] = 100;
}
dtThread.Rows.Add(drRow);
}
for (int j = 0; j < dtNumber.Rows.Count;j++)
{
cbNumber.Items.Add(dtNumber.Rows[j]["NAME"]);
}
cbNumber.SelectedIndex = 0;
for (int j = 0; j < dtThread.Rows.Count;j++)
{
cbThreadNum.Items.Add(dtThread.Rows[j]["NAME"]);
}
cbThreadNum.SelectedIndex = 0;
}
private void Form1_Load(object sender, System.EventArgs e)
{
SetCombox();
}
public void Sort()
{
try
{
while (true)
{
sraped = false;
for (int j = 0; j < valueArray.Length - 1; j++)
{
lock(typeof(Thread))
{
if (valueArray[j] > valueArray[j+1])
{
int T = valueArray[j];
valueArray[j] = valueArray[j +1];
valueArray[j+1] = T;
sraped = true;
}
}
}
Thread.Sleep(1);
if (!sraped)
{
break;
}
}
Thread.CurrentThread.Abort();
}
catch
{
if (Interlocked.Increment(ref treadCounter) == Convert.ToInt64(cbThreadNum.SelectedItem.ToString().Trim()))
{
Display();
}
}
}
private void btnSort_Click(object sender, System.EventArgs e)
{
string a = cbNumber.Items[cbNumber.SelectedIndex].ToString();
valueArray = new int[Convert.ToInt32(cbNumber.SelectedItem.ToString().Trim())];;
treadHolder.Clear();
valueArray.Initialize();
treadCounter = 0;
lbMsg.Text = "Sort .....";
for (int i = 0; i < valueArray.Length;i++)
{
valueArray[i] = valueArray.Length - i;
}
startTime = DateTime.Now;
for (int t = 0; t < Convert.ToInt32(cbThreadNum.SelectedItem.ToString().Trim());t++)
{
Thread thread = new Thread(new System.Threading.ThreadStart(Sort));
thread.Name = Convert.ToString(t);
thread.Start();
}
}
public void Display()
{
lbMsg.Text = "Sort Finish";
strng = String.Empty;
for (int i = 0; i < valueArray.Length; i++)
{
strng+= valueArray[i].ToString() + " ";
}
btnSort.Enabled = true;
TimeSpan ts = endTime - startTime;
ThreadAndTime+="Threads: " + cbThreadNum.SelectedItem.ToString().Trim() + "second:" + ts.ToString();
OutTxt = strng + "/r/n";
lbSort.Text = OutTxt + ThreadAndTime;
}