博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 多线程操作实例
阅读量:5377 次
发布时间:2019-06-15

本文共 4003 字,大约阅读时间需要 13 分钟。

1.多线程操作 一旦打开线程就必须记得关闭

1.第一部分

这是个数字叠加小功能

private void CountTo(int countTo, CancellationToken ct)        {            int sum = 0;            for (; countTo > 0; countTo--)            {                if (ct.IsCancellationRequested)                {                    break;                }                sum += countTo;                //Invoke方法用于获得创建lbl_Status的线程所在的上下文                this.Invoke(new Action(() => textBox2.Text = sum.ToString()));                Thread.Sleep(200);            }        }
private CancellationTokenSource _cts;        private void button1_Click(object sender, EventArgs e)        {            _cts = new CancellationTokenSource();            ThreadPool.QueueUserWorkItem(state => CountTo(int.Parse(textBox1.Text), _cts.Token));        }

代码中Textbox1输入叠加数量的范围 ,textbox2 为显示Textbox

取消累加

private void button2_Click(object sender, EventArgs e)        {            if (_cts != null)                _cts.Cancel();        }

2.第二部分

这是个listbox 点击添加1.2.3.4.5。。。。。直到您点击停止

Thread[] workThreads = new Thread[1];   private void button3_Click(object sender, EventArgs e)        {            for (int i = 0; i < workThreads.Length; i++)            {                if (workThreads[i] == null)                {                    //如果线程不存在,则创建                      workThreads[i] = new Thread(new ThreadStart(DataGet));                    workThreads[i].Name = i.ToString();                    workThreads[i].Start();                }                else                {                    //已经存在,如果没有运行,则启动                      if (workThreads[i].ThreadState == ThreadState.Aborted || workThreads[i].ThreadState == ThreadState.Stopped)                    {                          workThreads[i] = new Thread(new ThreadStart(DataGet));                        workThreads[i].Name = i.ToString();                        workThreads[i].Start();                    }                    else                    {                        workThreads[i].Start();                    }                }            }          }
public void DataGet()          {            while (true)            {                if (listBox1.Items.Count > 0)                {                    int text = int.Parse(listBox1.Items[listBox1.Items.Count - 1].ToString()) + 1;                    AddItem(text.ToString());                    Thread.Sleep(1000);                }                                                }            //如果此方法退出了,那么这个线程也就退出了             }
private void AddItem(string text)        {            if (this.listBox1.InvokeRequired)            {                AddItemCallback d = new AddItemCallback(AddItem);                this.Invoke(d, new object[] { text });            }            else            {                this.listBox1.Items.Add(text);            }        }

 

关闭线程

private void button4_Click(object sender, EventArgs e)        {            this.listBox1.Items.Clear();            for (int i = 0; i < workThreads.Length; i++)            {                //如果线程存在,并且状态不是停止也不是终止的,则终止该线程                  if (workThreads[i] != null && workThreads[i].ThreadState != ThreadState.Stopped && workThreads[i].ThreadState != ThreadState.Aborted)                {                    workThreads[i].Abort();                }            }            this.listBox1.Items.Add("1");        }

3.第三部分是模仿着自己写的

//调取主板的声音        [DllImport("kernel32.dll", EntryPoint = "Beep")]        public static extern int Beep(int dwFreq, int dwDuration);
public void PLaySound()        {            for (int a = 1; a < 10; a++)            {                Beep(800, 1000);                Beep(500, 1000);            }            //thread.Join();        }

 

private void button5_Click(object sender, EventArgs e)        {                 thread = new Thread(new ThreadStart(PLaySound));                 thread.Start();         }

关闭进程

private void button6_Click(object sender, EventArgs e)        {            thread.Abort();        }

进程操作有很多种,仅供自己在编程时使用

 

转载于:https://www.cnblogs.com/hanke123/p/5881666.html

你可能感兴趣的文章
【php数组函数序列】之array_shift() - 删除数组中的第一个元素
查看>>
linux中重要数据声明
查看>>
一份完整的阿里云 Redis 开发规范,值得收藏!
查看>>
vs2008转vs2010发布网站注意事项
查看>>
2019.04.11 电商总结
查看>>
DB2时间函数大全(转)
查看>>
Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags
查看>>
flutter 读取sdcard权限问题相关
查看>>
js获取元素节点
查看>>
吴裕雄--天生自然 PHP开发学习:函数
查看>>
TCP连接中的TIME_WAIT状态二
查看>>
常用的HDFS操作
查看>>
第四周作业
查看>>
腾讯分析系统架构解析
查看>>
UglifyJS压缩JS
查看>>
PHP array_diff_uassoc
查看>>
Word添加论文引用标注
查看>>
根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米...
查看>>
【总结】线段树
查看>>
前端必备 CSS Sprites雪碧图生成工具
查看>>