c# 线程操作实例

原创 2016年08月31日 08:51:47
namespace 线程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 启动线程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //Start()启动线程,告诉CPU可以执行我的任务了,具体何时执行,由CPU决定.
            //Abort()终止线程,终止完成后不能再Start()
            //Thread.Sleep(1),使当前线程停止一段时间运行.
            //Name 线程名
            //Thread.CurrentThread 获得当前的线程引用。

            this.label1.Text = "";
            this.label2.Text = "";
            Control.CheckForIllegalCrossThreadCalls = false;//取消程序交叉检查
        }

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

        private void text()
        {
            for (int i = 0; i < 1000000; i++)
            {
                this.label1.Text = i.ToString();
            }
        }

        private void text2(object obj)
        {
            for (int i = 0; i < 1000000; i++)
            {
                this.label2.Text = obj.ToString();
            }
        }
        /// <summary>
        /// 线程调用无参函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(text);
            th.IsBackground = true;
            th.Start();
        }

        /// <summary>
        /// 线程执行的函数若要带参,参数类型必须是object
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(text2);
            th.IsBackground = true;
            th.Start("线程调用了带参数函数");
        }

        private void playgame()
        {
            Random r = new Random();

            while (true)
            {
                this.label1.Text = r.Next(0, 10).ToString();
                this.label2.Text = r.Next(0, 10).ToString();
            }
        }

      

        private void button4_Click(object sender, EventArgs e)
        {
            playgame();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(playgame);
            th.IsBackground = true;
            th.Start();
        }


        bool b = false;
        private void playgame2()
        {
            Random r = new Random();

            while (b)
            {
                this.label1.Text = r.Next(0, 10).ToString();
                this.label2.Text = r.Next(0, 10).ToString();
            }
        }
        private void button6_Click(object sender, EventArgs e)
        {
            Random r = new Random();

            if (b == false)
            {
                b = true;
                button6.Text = "停止";
                Thread th = new Thread(playgame2);
                th.IsBackground = true;
                th.Start();
            }
            else
            {
                b = false;
                button6.Text = "新奖(2)";
            }
        }
    }
}

相关文章推荐

[转]C#子线程更新UI控件的方法实例总结

[我的评论:之前项目做的C#客户端对于多线程修改UI使用的就是这个,找了好些时间才找到,其他很多都是没有再函数中直接使用Action [来源:http://www.jb51.net/article/...

C# Singleton 如何实现多线程多实例,每个线程中有且只有一个实例

以前项目中使用的单例一直是用的最简单的C#写法,是Thread Safe的,多线程下只会有一个实例。代码如下:   public sealed class Singleton     {   ...
  • wyh0318
  • wyh0318
  • 2012年07月09日 12:45
  • 252

C#-WinForm跨线程修改UI界面的实例

  • 2017年11月14日 18:04
  • 47KB
  • 下载

C#多线程编程实例 线程与窗体交互

C#多线程编程实例 线程与窗体交互代码: public partial class Form1 : Form { //声明线程数组 Thread[] wo...

LZMA C# SDK 子线程压缩与解压缩 Unity3d实例

计划在项目中使用 不压缩的Assetbundle ,所以需要对Assetbundle 进行手动压缩打包,因为之前有对 十万个冷笑话的打包分析,所以这次坚定选择 LZMA压缩算法来压缩Assetbund...

C# 线程创建实例

线程在ASP.NET 中的使用非常广泛,也非常重要。同样。asp.net中创建一个线程的实现方法也非常简单,只需将其声明并为其提供线程起始点处的方法委托即可实现。创建新的线程时,需要使用 Thread...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# 线程操作实例
举报原因:
原因补充:

(最多只允许输入30个字)