哪位高人给讲讲C#中的线程?

解决方案 »

  1.   

    相关资料http://topic.csdn.net/u/20100622/19/ba483234-f4c2-43dc-9374-17bd1602d4b1.html
      

  2.   

    .net 封装的很好了,简单的调用下就哦了
      

  3.   

    虽然微软给封装好了,但是线程用起来还是比较复杂的,一般简单的应用也就只要用到 线程的start(),stop()方法。像什么abort(),join()等偶尔会用到。线程里面复杂的要算线程要执行的方法,必须是要用委托的。而且在子线程中要更改主线程(或者是线程的创建者,也可以说的界面线程)的某些属性的时候,就必须要用invoke(),或者begininvoke()方法。当多个线程要执行同一方法的时候还要记住要将这个方法lock住。
      

  4.   

    google 下 线程 进程 区别
      

  5.   

    看看这个吧,更加详细。
    http://www.albahari.com/threading/
      

  6.   

    给你一个例子
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Threading;
    namespace Text
    {
        public class AA
        {
            FileStream fs;
            FileStream wfs;
            byte[] filedata;
            int len;
            private void button3_Click(object sender, EventArgs e)
            {
                Thread thd, thd2;
                fs = new FileStream(@"d:\test.txt", FileMode.Open);
                wfs = new FileStream(@"d:\write.txt", FileMode.Create);
                len = (int)fs.Length;
                filedata = new Byte[len];
                fs.Read(filedata, 0, len);
                System.Threading.AutoResetEvent controlThda =
                    new System.Threading.AutoResetEvent(false);
                System.Threading.AutoResetEvent controlThdb =
                    new System.Threading.AutoResetEvent(false);
                System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWritetwo), controlThda);
                System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWriteone), controlThdb);
                controlThda.WaitOne();
                controlThdb.WaitOne();            wfs.Close();
                fs.Close();
                Console.WriteLine("f");        }
            private void MultiWriteone(object state)
            {
                wfs.Seek(0, SeekOrigin.Begin);
                wfs.Write(filedata, 0, 5);
                Console.WriteLine("1 End");
                ((System.Threading.AutoResetEvent)state).Set();
            }
            private void MultiWritetwo(object state)
            {
                wfs.Seek(5, SeekOrigin.Begin);
                wfs.Write(filedata, 5, len - 5);
                Console.WriteLine("2 End");
                ((System.Threading.AutoResetEvent)state).Set();
            }    }
    }
      

  7.   

    多线程的优劣/性能/系统开销2009年06月11日 星期四 23:38线程创建之前
    1.系统为线程分配并初始化一个线程内核对象;
    2.系统为每个线程保留1MB的地址空间(按需提交)用于线程用户模式堆栈;
    3.系统为线程分配12KB(左右)的地址空间用于线程的内核模式堆栈。
    线程创建之后
    4.Windows调用当前进程中的每个DLL都有的一个函数,用来通知进程中的所有DLL,操作系统创建了一个新的线程。
    销毁一个线程时
    5.当前进程中的所有DLL都要接收一个关于该线程即将"死亡"的通知;
    6.线程的内核对象及创建时系统分配的堆栈需要释放。
    如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。
    Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。
    Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。
    上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。上下文切换的开销:1.进入内核模式;
    2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
    注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
    3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
    如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
    4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
    5.退出内核模式。
    以上都是纯粹的开销,导致Windows和应用程序的执行速度比在单线程系统上的执行速度慢。
    综上所述:应尽量限制线程的使用。
    多线程的带来的好处:
    1.健壮性。
    此线程的错误不会影响彼线程。
    2.可扩展性。
    多个CPU情况下,可充分发挥多个CPU的优势。
     
      

  8.   

    线程 就是 你发现 当你一下子要同时做多件事,时候 用我们传统的man函数没发显示的这时我们就应该考虑到线程,比如你在 计算数据长度的时候又同时显示进度条。至于如何使用 自己找段代码对着写几下就会了。