求一个方法,一种思路!
做了一个抽奖机,要从事先从xml中取出并以Key-Value的形式存入Hashtable的号码中提出3个中奖号码,
Key是1,2,3...Value是号码,我已经完成大部分功能,但是取出的号码会有重复
于是我写了
if(txt1.text != txt2.text)//txt为显示号码的TextBox
{
foreach (Thread t in al_thread)
{
if (t.ThreadState == ThreadState.Running || t.ThreadState == ThreadState.WaitSleepJoin)
{
t.Abort();
}
}
}
也就是希望在抽出的号码不相等的时候终止进程
可是判断如果不成立,也就是走了else我该怎么做?想写在循环里重复检查是否相等,可是没有用……
要怎么做好呢?
相关方法有:
private void ExcuteThread(TextBox txt, Hashtable table)
{
Threading t = new Threading(txt, table);
Thread th = new Thread(new ThreadStart(t.setTextBox));
th.Start();
al_thread.Add(th);//al_thread为存放线程的ArrayList
}
public void setTextBox()
{
while (ctrl)
{
int key = 0;
int area = 0;
area = ht.Count + 1;
r = new Random();
key = (int)r.Next(1, area);
foreach (DictionaryEntry de in ht)
{
if (Convert.ToInt32(de.Key.ToString()) == key)
{
SetTextWithDelegate(de.Value.ToString());
}
}
Thread.Sleep(100);
}
}
public delegate void MyInvoke(string str);
private void SetText(string s)
{
txt.Text = s;
}
private void SetTextWithDelegate(string s)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
if (txt.InvokeRequired)
{
//this.Invoke(_myInvoke, new object[] { s });
txt.Invoke(_myInvoke,new object[]{s});
}
else
{
txt.Text = s;
}
}
------解决方案--------------------你可以先将所需要的数字放入一个数组中
然后从数组中随机抽取,抽取一个,就从数组中删除一个,以保证随机抽取的数字没有重复。
------解决方案--------------------你另外添加一个hashtable,把你读取出来的dt放进去,添加新dt进去的时候判断 ht.ContainsValue()如果没有相同的value就放进去,再取新的hashtable的值就好了。
------解决方案--------------------很简单,如果你用 hashtable 也行啊。
每此随机取值后,将所取的删掉,然后,再将 没有取到的值,重新放到hashtable中,就可以了呀。
------解决方案--------------------
代碼很長不看了,但是看題目應該很簡單.
每取一個判斷下,相同則剔除,不相等則放入繼續.
t.Abort(); 這個方法有時候線程是停不了的,要停止時候,你把while (ctrl) 中的ctr設置成False.