| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 535 人关注过本帖
标题:线程问题
只看楼主 加入收藏
clam_sqq
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-4-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
线程问题
初次点击某按钮,执行某方法,再次点击,停止执行。再次点击,继续执行。
该过程是否能用线程解决,该如何解决。本人对线程不了解,望高手指教。
搜索更多相关主题的帖子: 线程 
2010-04-15 16:34
封闭
Rank: 9Rank: 9Rank: 9
来 自:广东省汕头市
等 级:蜘蛛侠
威 望:1
帖 子:501
专家分:1084
注 册:2007-9-14
收藏
得分:0 
程序代码:
        Thread t = null;
        int i = 1;
        private void button1_Click(object sender, EventArgs e)
        {
            if (i % 2 != 0)
                t = new Thread(new ThreadStart(Start));
            else
                t = new Thread(new ThreadStart(End)); 

                t.Start();
            i++;
           
        }

        private void Start()
        {
            MessageBox.Show("我是线程,开始工作!");
            if(t != null)
                t.Abort();
        }
        private void End()
        {
            MessageBox.Show("我是线程,结束工作!");
            if(t != null)
                t.Abort();
        }


[ 本帖最后由 封闭 于 2010-4-15 16:55 编辑 ]
2010-04-15 16:53
qubo1982
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:367
专家分:1132
注 册:2009-3-18
收藏
得分:20 
这个有点复杂
1.    不是所有的方法都可以做到,必须是循环,而且不会在你点击的时候就马上响应,要做完一个循环之后才能响应
2.    多线程是必段的,但是停止和继续都与线程无关
3.    个人建议使用 EventWaitHandle

具体如下:
先定义一个EventWaitHandle
EventWaitHandle eventWait = new EventWaitHandle(true, EventResetMode.ManualReset);//用true表示eventWait是无效的,遇到eventWait.WaitOne();也不会阻止

在循环中找一个位置放一条语句,如果没有特殊需要的话,放在哪里都可以,只要每次循环都会运行到这一条语句即可
eventWait.WaitOne();//这里请注意,只有使用过eventWait.Reset();之后它才会阻止进程,但是如果使用过一次eventWait.Set();之后它又无效了


在按钮的Click事件中,这里可以用一个BOOL值来控制它的状态
        bool isWait = false;
程序代码:
        private void btn_Click(object sender, EventArgs e)
        {
            if (isWait)
            {//解除eventWait.WaitOne();的阻止,并且这时eventWait无效,下一次运行到这个地方WaitOne();的时候也不会阻止
                eventWait.Set();
            }
            else
            {//让eventWait生效,当运行到循环中eventWait.WaitOne();语句时等待
                eventWait.Reset();
            }
            isWait = !isWait;
        }
2010-04-15 17:10
clam_sqq
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-4-7
收藏
得分:0 
回复 3楼 qubo1982
感谢详细的指导.....
在第一次点击按钮进入循环,在未执行完循环时按钮好像不能再次点击,点击窗体出现未响应,请问这怎么解决?

[ 本帖最后由 clam_sqq 于 2010-4-16 09:27 编辑 ]
2010-04-16 09:07
qubo1982
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:367
专家分:1132
注 册:2009-3-18
收藏
得分:0 
包含循环的那个方法一定要是一个单独的线程来运行
2010-04-16 14:00
快速回复:线程问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027116 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved