文档章节

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

编程码农
 编程码农
发布于 2016/05/15 14:44
字数 159
阅读 37
收藏 0
点赞 2
评论 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#多线程lock解决数据同步

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

小麋鹿666
2017/02/04
0
0
TCP/UDP服务程序框架--light-server-frame

一个基于C++开发的简单易用的服务器程序编写框架。通过多线程异步方式处理从客户端发来的消息。 (还未完成,只有部分实现,并且希望能引入更好的内存分配机制) 使用templete,可自由为ser...

eyesfour
2012/06/08
2.5K
0
C#-JudgeSystem判题系统-客户端和多线程

运行环境: vs2013 框架: .net4.5 上次实验中已经实现了单线程下的socket的tcp服务器 由于使用浏览器并不能直观的显示socket之间的交互相应,所以这次实验我们先完成客户端部分的编程再进行服...

tmj
2015/08/19
0
0
并发编程中的重重量级模型和轻量级模型

并发编程中的重重量级模型和轻量级模型 使用轻量级并发开发 不管是Amdahl定律还是Gustafson的定律都没有考虑引入并发需要付出的额外开销。同时也没有考虑那些可以将顺序代码转变成可以利用并...

SeanCai
2012/06/11
0
0
C#-JudgeSystem判题系统-开放实验总结

花了一周的时间去做这个实验中间断断续续完成不同的部分,按照实验过程来一步一步完成感觉实验流程还是相当合理的 上图就是最后的成品,其中包括 JudgeCilent客户端 完成部分: 1、可以提供五...

tmj
2015/08/19
0
0
【物联网智能网关-16】成功移植SQLite(STM32 .NET MF平台)

前言 .NET Micro Framework系统官方代码是不支持任何数据库的,这对一些具有用户管理的Web Server、RFID数据采集和复杂的手持机应用来说是非常不方便的。 很早就知道了SQLite,但是一直没有深...

yefanqiu
2013/01/16
0
0
php7高性能网络通信库appnet

appnet介绍 appnet是一个基于linux epoll的多线程的高性能异步网络库,目标是用php7+appnet快速构建高性能的长连接服务器。使其可广泛用于聊天系统,游戏服务器,消息通知服务器等实时通信场...

appnet
2016/01/28
102
0
C# WinForm开发系列 - Thread/Delegate/Event

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。那我们为什么...

长征2号
2017/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

PostgresSQL 查看当前schema下所有的函数/存储过程

selectroutine_name from information_schema.routineswhere routine_catalog = 'YourDBName'and routine_schema = 'YourSchemaName'order by routine_name;...

Leyxiao
3分钟前
0
0
去除bootstrapValidator 的校验结果

$("#form").data('bootstrapValidator').destroy();//会报没有这个方法,很奇怪 $('#form').data('bootstrapValidator',null); $('#form').bootstrapValidator();...

暗中观察
4分钟前
0
0
java环境安装

1、首先下载jdk安装包,一般去官网,官网需要登录才可以下载。 2、下载完成双击运行,想改路径改下路径,比较简单。安装jdk安装完,会弹出个窗口,提示开始安装jre的位置,我这里窗口比较奇葩...

朝如青丝暮成雪
6分钟前
0
0
Linux Command

Copy with progress rsync -r --progress source dest

Lyle_W
7分钟前
0
0
个灯数据营销,帮你找回被浪费的广告费

近日,个灯受邀出席被喻为广告营销业界的年度盛会——第八届梅花网传播业大展北京站的活动。 在展会上,个灯总经理严雯婷女士带来了《数据增能,营销智能》的主题演讲,以理论与实践相结合的...

个推
9分钟前
0
0
java的反射机制理解

一、概念说明 java的反射机制,是在运行状态下,可以动态获取任意一个类的属性和方法;可以动态调用一个对象任意方法; 二、反射相关类 java.lang.Class; //类 java.lang.re...

盼望明天
12分钟前
0
0
nginx反向代理-多端口映射

代码解释 1.1 http:www.baidu.test.com默认是80,访问“/”利用反向代理,然后访问本地8083; 1.2 8083代表本地的前端工程访问地址,前端需要访问后台数据,”/”,继续代理到后台地址9803; ...

lilugirl
14分钟前
0
0
Jfinal使用log4j2打印日志

1,添加maven配置 <properties><log4j2.version>2.11.0</log4j2.version><slf4j.version>1.7.25</slf4j.version></properties> <!--slf4j及log4j2日志 --><dependency> ......

iborder
15分钟前
0
0
如何在Rancher 2.0上快速部署Datadog

Datadog是一种流行的托管监控解决方案,用于聚合和分析分布式系统的指标和事件。从基础架构集成到协作仪表板,Datadog为用户提供了一个简洁的单一窗格视图,用户可以快速查看对其最重要的信息...

RancherLabs
18分钟前
0
0
Java示例演示Functor 和monad

This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit......

Quan全
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部