线程相关知识及应用

1.在运行打印结果时,窗体Form1是无法移动的,这就是窗体作为主线程被阻塞。

有时候我们难免会遇到要做特别消耗时间的一些操作。

因此,解决上述问题 就要用多线程

2.按钮2点击事件,注册一个线程来运行Run这个函数,而thread.Start表示注册的线程开始运行。

按钮3点击事件是获取线程的状态

3.第一个是只含一个参数的构造函数

第二个是含多个的构造函数

在按钮4点击事件里第三个是注册线程来运行函数1,在thread.Start里面将需要的参数进行赋值。

第四个是注册线程来运行函数2并将需要的参数进行赋值。

注:第三个和第四个表达的方式是差不多的

区别:(1)第三个只能传一个参数,而第四个可以不传参数,也可以传一个,也可以传多个参数

4.构造两个函数

注册线程A来运行吃饭函数,注册线程B来运行睡觉函数,注册线程C来控制线程A和B,当线程A运行完之后线程B再运行,运行完后停止线程。

5.第一个就是定义要抢两张票

第二个是构造一个抢票函数

其中lock相当于一个门,对于多线程抢占一个变量时如果没有门就会引起争斗,导致票这个变量变为负数。

因此需要lock在有一个线程进来时将门锁住直至运行结束放其他一个线程进来。

6.下面代码中1和2运行结果等于3,Invoke是一种委托用来执行里面的行为

7.第一个是构造一个函数来改变标签上的文本显示。

第二个是按钮点击事件

第三个是一个异步操作来运行构造函数

第四个是防止线程阻塞,做一个线程的延续,也叫线程的异步来执行Console.WriteLine(task.Result);这个语句

8.第一个构造函数

第二个是子线程而if语句是主线程所以不安全,因此委托执行这个Console.WriteLine("当前线程名称>:" + Thread.CurrentThread.Name);

Console.WriteLine("当前线程ID>:" + Thread.CurrentThread.ManagedThreadId);

button1.Text = index.ToString();语句

先命名和获取ID,然后获取当前的线程和ID

按钮2点击事件就是用来改变当前线程名称的,这里没有命名所以为空

9.第一个构造函数判断鼠标长按时间index最多为5并且将index数字显示在窗体上。

第二个是鼠标按下事件,其中flag是判断鼠标有没有在按住按钮。

第三个是鼠标抬起事件这时鼠标已经抬起

10.(1)第一个是定义两个线程

第二个是当前坐标

第三个构造函数MoveRunRow时实现按钮的垂直运动

这个MoveRunCol构造函数时实现水平移动

(2)

(3)出现这个问题代表线程执行时是不安全的

所以,添加这个代码就可以在线程不安全情况下运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值