首页
社区
课程
招聘
[旧帖] [求助]写C#程序时遇到的一个问题,求大神解惑 0.00雪花
发表于: 2015-5-30 10:45 1569

[旧帖] [求助]写C#程序时遇到的一个问题,求大神解惑 0.00雪花

2015-5-30 10:45
1569
有问题的代码如下:
        private void WaitForm_Load(object sender, EventArgs e)
        {
            //this.Owner.Enabled = false;
            IsStop = false;
            closeThisForm();
        }
        private void closeThisForm()
        {
            while (!IsStop)
            { }
            
            
            this.Close();
            
            IsStop = false;
        }
这里面的IsStop是一个信号量,想要做到的是当另一个线程将IsStop置为true时,while循环结束,从而关闭WaitForm这个窗口,然而运行起来后却是while进入无限循环,并不会停止。但是,如果将closeThisForm另起一个线程,代码如下:
private void WaitForm_Load(object sender, EventArgs e)
        {
            //this.Owner.Enabled = false;
            IsStop = false;
            t = new Thread(new ThreadStart(closeThisForm));
            t.Start();

        }
        private void closeThisForm()
        {
            while (!IsStop)
            { }
            
            
            this.Close();
            
            IsStop = false;
        }
这样就可以做到终结while循环。这是为什么?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 90
活跃值: (80)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
c#的话我建议你砍掉重练,这种蛋疼的构架,一个timer就可以解决你的所有问题

你现在会阻塞是因为在主线程用了无限循环而且没有加sleep,导致不会切换到其他线程,自然你的另一个线程也没有办法去修改IsStop了
2015-5-30 13:15
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
非常感谢!
2015-10-23 19:33
0
雪    币: 266
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
无限循环建议放在后台线程中运行,采用委托等方式与ui线程交互比较好
2015-10-25 18:50
0
游客
登录 | 注册 方可回帖
返回
//