当前位置:asp编程网>技术教程>Asp教程>  正文

C#线程开发:winform简单的C#线程开发实例

2012-05-02 13:01:56   来源:网络    作者:佚名   浏览量:2856   收藏
一直想弄清楚线程是如何工作的,一直在找相关的实例都没有找到,没有找到容易看懂的实例。今天终于找到一个,觉得很简单,把它转到这里来分享一下。
要实现的效果是:
点击按纽,窗口上的label上出现1~100数字的变化。

窗口上有两个控键,一个label,一个button。

第一个实例(把窗口上的label上文字改成100):
using System;
using System.Windows.Forms;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "100";
        }
    }
}
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

这个是最简单的实例,应该不难看懂。

第二个实例(点击button,循环显示0动态变化到100数字):
using System;
using System.Windows.Forms;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "0";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for(int i=0;i<101;i++)
            {
                label1.Text = i.ToString();
            }
        }
    }
}
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
运行一下,点击一下button1,没有看到0~100动态变化,就直接到了100了。
原因:因为你的处理器速度太快了,就只能看到最后的结果,那么,怎样才能看到中间过程呢?
我们先用函数的方式来实现上面的功能
写个名为run的函数吧:
private void run()
{
    for(int i=0;i<101;i++)
    {
        label1.Text = i.ToString();
    }
}
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

这样就可以直接调用run函数实现功能了,而不用在事件函数内写代码。(这样做是有好处的)

整个代码如下:

第三个实例(使用函数

using System;
using System.Windows.Forms;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "0";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            run();    //调用run函数
        }

        private void run()
        {
            for(int i=0;i<101;i++)
            {
                label1.Text = i.ToString();
            }
        }
    }
}
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

这里就需要在循环过程中加延时了,假定我们每隔1s的延时,lable1的值增加1。
方法有很多,我们就用一个timer来实现延时。
添加一个timer, 命名为timer1,在timer1的tick事件内添加语句,改变label1的值。(Tick事件是每经过指定时间间隔后被触发)

第四个实例(使用timer),实现每隔1s的延时,lable1的值增加1,以达到动态变化的效果

using System;
using System.Windows.Forms;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        int i;          //全局变量i

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "0";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            run();
        }

        private void run()
        {
            i = 0;
            timer1.Interval = 1000; //设置timer1的间隔时间
            timer1.Start(); //启动timer1
        }

        private void timer1_Tick(object sender, EventArgs e) //timer1的Tick事件
        {
            i++;
            if (i > 100)
            {
                timer1.Stop();
            }
            label1.Text = i.ToString();
        }
    }
}
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

 同样的,我们运行一下,看看结果,很好,我们能够看到0~100循环的过程了。

以上是我们平常的做法,让label动态变化的效果,下面我们开始使用线程来实现上面的功能。


关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网