文档章节

C#多线程开发,简单示例-字符串并发处理

编程码农
 编程码农
发布于 2016/05/15 14:44
字数 159
阅读 56
收藏 0

源码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace PracticeThreadAppendString
{
    public partial class threadAppendStrForm : Form
    {
        StringBuilder sb = new StringBuilder();
        Thread threadA, threadB;
        public bool isStart = false;

        private void appendString(string s)
        {
            lock (sb)
            {
                sb.Append(s);
            }
        }
        private void methodA()
        {
            while (true)
            {
                if( !this.isStart){
                    break;
                }
                Thread.Sleep(100);
                appendString("A");
            }
        }
        private void methodB()
        {
            while (true)
            {
                if( !this.isStart){
                    break;
                }
                Thread.Sleep(100);
                appendString("B");
            }
        }
        public threadAppendStrForm()
        {
            InitializeComponent();
        }

        private void startThreadButton_Click(object sender, EventArgs e)
        {
            if (this.isStart)
            {
                return;
            }
            this.isStart = true;
            //清空缓冲区
            sb.Remove(0, sb.Length);
            appendStrTimer.Enabled = true;
            threadA = new Thread(new ThreadStart(methodA));
            threadB = new Thread(new ThreadStart(methodB));
            threadA.Start();
            threadB.Start();

        }

        private void exitThreadButton_Click(object sender, EventArgs e)
        {
            this.isStart = false;
            
        }

        private void appendStrTimer_Tick(object sender, EventArgs e)
        {
            if(threadA.IsAlive == true || threadB.IsAlive == true){
                showRichTextBox.Text = sb.ToString();
            }else{
                appendStrTimer.Enabled = false;
            }
        }
    }
}

效果如下:

 

© 著作权归作者所有

共有 人打赏支持
编程码农
粉丝 1
博文 19
码字总数 13170
作品 0
杭州
后端工程师
私信 提问
C# WinForm开发系列 - Socket/WCF/Rometing/Web Services

当今社会是一个信息化社会, 网络越来越多地影响人民的生活, 带来巨大的便利性; 而网络通信在软件开发中占据相当大的比重. Socket/WCF/Rometing/Web Services 各种技术纷至踏来, 应用广泛; 而...

长征2号
2017/08/11
0
0
C#中多线程和异步

C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是,异步和多线程还是有...

bigSoul
2017/06/08
0
0
C# 实现的缓存库 - WeavingDB

写在项目介绍前面,有些人觉得自己写一个DB内容,浪费时间,做的不会比成熟的好,有些人觉得C#效率一定很低,我的一些好朋友也觉的我写这个项目是存粹造轮子,我想说的是:1.之前开源了相关s...

dreamsfly
2018/12/01
0
0
并行编程(Parallel Framework)

前言 并行编程:通过编码方式利用多核或多处理器称为并行编程,多线程概念的一个子集。 并行处理:把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。多线程的一种。 并行编程分...

Jonins
2018/09/22
0
0
C#多线程lock解决数据同步

1.代码实例: { } 使用lock锁前后结果对比: 使用Lock锁前,多线程修改同一数据会出现相同结果, 使用Lock锁后,修改数据保证了数据的在多个线程操作时的同步。 2.使用Lock锁前后的性能对比:...

小麋鹿666
2017/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
34分钟前
1
0
OSChina 周日乱弹 —— 没时间 没头发 但有钱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @开源中国总经办主任 :分享齐一的单曲《这个年纪》 《这个年纪》- 齐一 手机党少年们想听歌,请使劲儿戳(这里) @肿肿卷 :我真的可以睡一天...

小小编辑
今天
45
4
Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
3
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部