public void Sort()
{
  try
  {
    while(true)
    {
      swaped = 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;
    swaped = true;
   }
 }
        }
Thread.Sleep(1);
if(!swaped) 
        { 
          break; 
        }
      }
      Thread.CurrentThread.Abort();
      }
      catch(Exception ex)
      {
    if( Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.Text.ToString().Trim()))
Display();
}
}
这个函数是多线程用来做冒泡算法的
有个问题,就是为什么这里要用try catch呢
还有 Interlocked.Increment(ref threadCounter)
这个是什么用法 有什么意义啊?

解决方案 »

  1.   

    try  catch 是异常检测
    try尝试执行,如果遇到错误则抛出异常 ,catch 获取异常信息
    可以用这个来使程序更加的健壮后面的...本人水平有限...
      

  2.   

    Thread.CurrentThread.Abort(); 会引发TreadAbortException异常.try catch捕获后进入catch代码块。
      

  3.   

    Interlocked.Increment(ref threadCounter) 以原子操作的形式递增指定变量的值并存储结果。 
      

  4.   

    你这是从大程序里copy出来的一段啊,变量定义什么都没有啊,怎么知道是什么用法.
    try/catch 主要是防止Thread.CurrentThread.Abort();出错的吧.
      

  5.   


    为什么Thread.CurrentThread.Abort()会引发TreadAbortException 啊?
      

  6.   


    看MSDN:
    When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it.
    当你调用Thread::Abort()的时候,ThreadAbortException就会被抛出。
    不过这个Exception不一定要接, 因为就算你在你的catch里接了, 它也一样会在你的catch里被抛出的。
    除非你在你的catch{}里Invoke Thread::ResetAbort();
    我看了一下你上面的代码, 其实你不需要调用:Thread.CurrentThread.Abort(); 这显得有些多余了。。
    你可以改为:
            public void Sort()
            {
                while (true)
                {
                    swaped = 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;
                                swaped = true;
                            }
                        }
                    }
                    Thread.Sleep(1);
                    if (!swaped)
                    {
                        break;
                    }
                }
                //当你跳出你的 dead while loop的时候,其实你的Thread已经要完成了。
                //当你的Thread里的代码运行完毕的时候你的Thread就会自动消失, 无需使用Abort();
                //除非你的这个Sort()方法是在别的Thread里调用了, 那么使用Abort()就有必要了。
                if (Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.Text.ToString().Trim()))
                    Display();        }
    //=======================
    Interlocked.Increment(int value);
    这个方法保证了Thread Safe增加一个int数值。在多Thread并发的情况下, 你可以使用这个方法.