首页 新闻 会员 周边 捐助

winform难题.高手进

-1
[已解决问题] 解决于 2012-10-11 21:25

 private bool IsRun;
        private void stop_Click(object sender, EventArgs e)
        {
            IsRun = false;
            StreamWriter sw = File.AppendText(@"d:\myserver.txt");
            sw.WriteLine(string.Format("停止:启动时间{0}", DateTime.Now));
            sw.Close();
        }

        private void begin_Click(object sender, EventArgs e)
        {
            IsRun = true;
            while (IsRun)
            {
                try
                {
                    StreamWriter sw = File.AppendText(@"d:\myserver.txt");
                    sw.WriteLine(string.Format("启动:启动时间{0}", DateTime.Now));
                    sw.Close();
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                System.Threading.Thread.Sleep(10000);
            }
        }
    }

当按下按钮beigin后。。为什么stop按钮无法被按下。。好像假死的状态?????????????

彬彬@科比的主页 彬彬@科比 | 初学一级 | 园豆:43
提问于:2012-10-08 19:50
< >
分享
最佳答案
1

你这样搞当然不行,你这样等同于在一个程序里同时运行两个子程序,:begin_Click是一个子程序,stop_Click又是一个子程序,当你点击begin后程序开始死循环,你写的这个System.Threading.Thread.Sleep(10000)并不代表程序停止1秒再执行,它是一直在执行着,只是每延时1秒执行一次,当第一个程序还没结束(当然除了你把进程结束掉外,永远不可能结束)你却点击stop运行第二个子程序,一般的程序不可能同时运行多个子程序,除非用线程启动多个子程序,我把你的改一下就不会错了:

首先引用命名空间:

using System.Threading;

 

bool isrun=true;

Thread th;

 private void stop_Click(object sender, EventArgs e)
        {

        th.Abort();//结束线程

   }

        private void begin_Click(object sender, EventArgs e)
        {

      th= new Thread(new ThreadStart(startpp));//用线程调用方法
                th.Start();//启动线程
         }


    void startpp()

  {

    while (IsRun)
            {
                try
                {
                    StreamWriter sw = File.AppendText(@"d:\myserver.txt");
                    sw.WriteLine(string.Format("启动:启动时间{0}", DateTime.Now));
                    sw.Close();
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                System.Threading.Thread.Sleep(10000);
            }

  }

奖励园豆:5
斗天! | 菜鸟二级 |园豆:260 | 2012-10-08 23:23

受教了

朝曦 | 园豆:1073 (小虾三级) | 2012-10-09 08:17
其他回答(1)
1

System.Threading.Thread.Sleep(10000);

不是在这停了吗,你要开另外一个线程去做 begin_Click的事。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-08 20:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册