|
|
|
C# WinApp System.Threading.Thread อยาก shutdown เครื่องหลังจากที่ทุก thread ทำงานเสร็จต้องเขียนโค๊ดยังไงครับ |
|
|
|
|
|
|
|
ปกติ Thread ที่เรียก มันก็จบด้วย Method ที่เรียกทำงานน่ะครับ ส่วน 26 Thread ก็เขียนเงื่อนไขแล้วแทรกคำสั่ง Shutdown ครับ
Code (C#)
using System.Diagnostics;
Code (C#)
ProcessStartInfo startinfo = new ProcessStartInfo("shutdown.exe", "-s");
Process.Start(startinfo);
|
|
|
|
|
Date :
2014-12-18 17:22:42 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โค้ดเป็นประมาณนี้ครับ
แต่ผมคิดไม่ออกว่าจะคำสั่ง shutdown ไว้ไหน
Code (C#)
private void CheckFile(object obj)
{
string cri = "";
int min = (int)((object[])obj)[0];
int max = (int)((object[])obj)[1];
int i = min;
while (true)
{
if (this.sONGDataGridView[3, i].Value.ToString().Trim().Replace(" ", "").ToUpper() != cri)
{
cri = this.sONGDataGridView[3, i].Value.ToString().Trim().Replace(" ", "").ToUpper();
}
else
{
sngDel++;
if (this.sONGDataGridView[2, i].Value.ToString() == "EMK")
{
MIDI_Dll.MIDI_Dll.MoveFile(PathKARA + "\\SONGS\\MIDI\\EMK\\" + this.sONGDataGridView[0, i].Value.ToString().Substring(0, 1) + "\\" + this.sONGDataGridView[0, i].Value.ToString() + ".emk");
}
else if (this.sONGDataGridView[2, i].Value.ToString() == "NCN")
{
MIDI_Dll.MIDI_Dll.MoveFile(PathKARA + "\\SONGS\\MIDI\\NCN\\Lyrics\\" + this.sONGDataGridView[0, i].Value.ToString().Substring(0, 1) + "\\" + this.sONGDataGridView[0, i].Value.ToString() + ".lyr");
MIDI_Dll.MIDI_Dll.MoveFile(PathKARA + "\\SONGS\\MIDI\\NCN\\Cursor\\" + this.sONGDataGridView[0, i].Value.ToString().Substring(0, 1) + "\\" + this.sONGDataGridView[0, i].Value.ToString() + ".cur");
MIDI_Dll.MIDI_Dll.MoveFile(PathKARA + "\\SONGS\\MIDI\\NCN\\Song\\" + this.sONGDataGridView[0, i].Value.ToString().Substring(0, 1) + "\\" + this.sONGDataGridView[0, i].Value.ToString() + ".mid");
}
}
try
{
this.progressBar2.Invoke(new Action(() => { this.progressBar2.Value = sngRun; }));
if (sngRun > 0)
{
double t = DateTime.Now.TimeOfDay.TotalSeconds - startCounter;
double strt = (double)((this.sONGDataGridView.RowCount - sngRun) * t / sngRun);
this.label3.Invoke(new Action(() =>
{
this.label3.Text = "Cri =" + cri + Environment.NewLine +
"Check code " + this.sONGDataGridView[0, i].Value.ToString() + this.sONGDataGridView[2, i].Value.ToString() + Environment.NewLine +
"Delete file;" + sngDel + Environment.NewLine +
"File: " + sngRun + "/" + (this.sONGDataGridView.RowCount - 1) + Environment.NewLine +
"Completion Ratio:" + string.Format("{0:0.0000}", Convert.ToDouble(100 * (double)sngRun / (double)(this.sONGDataGridView.RowCount - 1))) + " %" + Environment.NewLine +
"Speed:" + string.Format("{0:0.00}", ((double)sngRun / t)) + "file/s" + Environment.NewLine +
"Elapsed time:" + MIDI_Dll.MIDI_Dll.Time(t) + Environment.NewLine +
"Remaining time:" + MIDI_Dll.MIDI_Dll.Time(strt);
}));
}
this.progressBar2.Invoke(new Action(() => { this.progressBar2.Value = sngRun; }));
}
catch { }
System.Threading.Thread.Sleep(10);
sngRun++;
i++;
if (i >= max) { return; }
}
}
private void frmCuteMIDI_Load(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{
new System.Threading.Thread(CheckFile).Start(new object[] { i * sngPer, (i + 1) * sngPer - 1 });
}
}
|
|
|
|
|
Date :
2014-12-18 17:30:47 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากทราบว่าถ้าอยากรู้ว่า ทั้ง 26 thread ทำงานเสร็จทุกตัวยังนี่
ต้องทำยังไงครับ
|
|
|
|
|
Date :
2014-12-19 09:11:26 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งั้นก็๋หาวิธีส่ง Parameters ไปกับ CheckFile ด้วยครับ มันจะได้ทำงานเฉพาะ Thread ที่มี id สุดท้าย
|
|
|
|
|
Date :
2014-12-19 10:51:22 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับ
ผมลง windows ใหม่ต้องรอลง VS แป๊บเด๋วลองดูครับ
ขอบคุณมากครับพี่
|
|
|
|
|
Date :
2014-12-19 13:55:18 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|