本人写了个程序  代码如此:我说下大体思路: 我就是做一个TIMER 由于我需要的操作不是同步的,所以我用了线程,我的思路是重新启动个线程,然后来执行播放声音,那么我的程序写的是每1秒都执行这个线程,也就是说每秒都要有线程开启,那么开启的线程是否需要关闭?还是线程开启后他执行后就自动关闭? 我现在的疑问是:是否会造成系统由于打开过多线程而崩溃掉?   
其实就是:1:线程打开,他执行后是否会自动关闭?
          2:线程开启后是否需要手动关闭?
          3:如果需要手动关闭,怎么关闭?我的意思是在什么处理的时候进行关闭?而不是关闭指令怎么写
        /// <summary>
        /// 新开线程播放声音
        /// </summary>
        /// <param name="a"></param>
        private void  voice(voicetype a)
        {
            if((int)a==0)
            {
            Thread tr = new Thread(TG);
            tr.Start();
            }
            if ((int)a == 1)
            {
                Thread tr = new Thread(CP);
                tr.Start();
            }
            if ((int)a == 2)
            {
                Thread tr = new Thread(ERROR);
                tr.Start();
            }
        }
       /// <summary>
       /// 通过门票声音
       /// </summary>
        void TG()
        {
            System.Media.SoundPlayer sp = new SoundPlayer();
            sp.SoundLocation = "TG.wav";
            sp.Load();
            sp.PlaySync();
        }
        /// <summary>
        /// 重复进入声音
        /// </summary>
        void CP()
        {
            System.Media.SoundPlayer sp = new SoundPlayer();
            sp.SoundLocation = "CP.wav";
            sp.Load();
            sp.PlaySync();
        }
        /// <summary>
        /// 非法门票声音
        /// </summary>
        void ERROR()
        {
            System.Media.SoundPlayer sp = new SoundPlayer();
            sp.SoundLocation = "ERROR.wav";
            sp.Load();
            sp.PlaySync();
        }
        /// <summary>
        /// 枚举OK为合法,cancle为重复进入,error为非法门票
        /// </summary>
       public enum voicetype
        {
            ok,
            cancle,
            error
        }

解决方案 »

  1.   

    搞个bool变量当你声音播放完后就关闭 。。
      

  2.   

    不同的线程是不同的执行线路, 不同线程之间互作, 一般用一些内核对象, 比如 mutex, event, 等来同步,好比一个线程碰到一个条件, 叫了一下, 另一个线程听到了, 赶紧采取对应的行动.
      

  3.   

    他是每秒都执行一个线程开启 thread.start(),   不是要求并发,就是第1个thread.start()后,肯定第2个不会执行在第1个执行前或者中强制执行!我的代码再上面 你们可以看下  
      

  4.   

    首先申明,没有看你的代码,只是看了下你的文字描述部分:
    1、线程打开,他执行后是否会自动关闭? 线程开启,会不会关闭要看你线程执行的方法,如你的线程执行方法中有打开窗体,就不会自动退出,因为窗体SHOW出来后会阻塞线程继续执行;如你的方法里有类似于while(true){},自然线程也不会退出等等,总之只要你的方法中没有阻塞线程运行的东东,线程在执行完后会退出。
    2、如果线程阻塞或还没有运行完成,而你又要退出程序,这个时候要做退出线程处理,另:如果你开的线程指明是后台线程,不退出的话在主线程退出后会自动销毁,否则,进程退出你会在进程管理器中看到你的程序还在运行。
    3、不知道要回答你什么
      

  5.   

    8楼  回答的很不错 经典  中的经典  
    我的 线程中无阻塞,他只是进行一个声音的播放,播放1个wav后 就OK了,当第2秒的时候我的第1秒程序还没有执行完
    我刚才听了下声音,第2秒的声音会排在第1秒声音后执行,也就是说线程里面是否会有一个类似于等待队列的东西?按顺序执行?    不停的开启播放声音的线程,他们会一直在等待队列中等待,然后当第1秒执行完播放后,他执行第2秒,直到等待全执行完毕他自行进行关闭?