日期:2014-05-18  浏览次数:21013 次

求一个方法,一种思路!
做了一个抽奖机,要从事先从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.