我是新来的多线程,但我不知道什么是错我的代码:C#多线程的逻辑错误
public int k;
private void button2_Click(object sender, EventArgs e)
{
k = 10;
ThreadPool.SetMinThreads(2, 6);
ThreadPool.SetMaxThreads(2, 6);
ThreadPool.QueueUserWorkItem(aki);
ThreadPool.QueueUserWorkItem(aki);
}
public void aki(object ab)
{
do
{
this.SetText1(textBox1.Text +
" thread " + Thread.CurrentThread.GetHashCode() +
" valu= " + k + Environment.NewLine);
k--;
} while (k > 0);
if (k < 0) Thread.CurrentThread.Abort();
}
针对上述情况,我得到了以下的输出:
thread 11 valu= 10
thread 11 valu= 8
thread 11 valu= 6
thread 11 valu= 4
thread 11 valu= 2
thread 10 valu= 0
我在10,9,8,7,6,5,4,3,2,1,0
预期的输出请指导我对什么是错。
我试图一次运行两个线程。
怎么办?
编辑:罗希特的回答后,我试过,但我得到了以下的输出:
thread 11 valu= 10
thread 12 valu= 9
thread 12 valu= 8
thread 11 valu= 7
thread 11 valu= 6
thread 6 valu= 7
thread 6 valu= 6
thread 6 valu= 5
thread 13 valu= 3
thread 14 valu= 2
thread 14 valu= 1
在此运行,7和6的重复两次。
1)永远不要放弃一池线程 –
2)你'SetText1()'可能是线程 - 安全但即使读取'textBox1.Text'对于线程来说是不安全的。 –
那么,我应该使用什么,而不是中止...? – Aki003