vb.net的多线程问题为什么两个线程同时开始,导致每次输出结果不同

ImportsMicrosoft.VisualBasicImportsSystemImportsSystem.ThreadingPublicClassthreadFrie... Imports Microsoft.VisualBasic
Imports System
Imports System.Threading

Public Class thread
Friend StrArg1 As String
Friend StrArg2 As String
Sub SomeTask1()
StrArg1 = "wonderful"
End Sub

Sub SomeTask2()
StrArg2 = "It's "
End Sub

End Class
Public Class form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim tasks As New thread
Dim Thread1 As New System.Threading.Thread(AddressOf tasks.SomeTask1)
Dim Thread2 As New System.Threading.Thread(AddressOf tasks.SomeTask2)
Thread1.Start()
Thread2.Start()
Thread1.Abort()
Thread2.Abort()
TextBox1.Text = tasks.StrArg1
TextBox2.Text = tasks.StrArg2

End Sub
End Class
这段代码,在visual studio2013上每次运行的结果都不一样

等多种情况,这是为什么啊
展开
 我来答
百度网友ba88284
2015-02-28 · TA获得超过1521个赞
知道大有可为答主
回答量:1822
采纳率:73%
帮助的人:565万
展开全部
你真心无聊。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。

主线程只是通知系统,请启动一个线程运行某某函数。

而哪个线程先运行笑盯伍完全在则则系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没碰或有启动起来,所以你会遇到两个变量都是空值这种情况。
追问
那我如何实现每次都有值呢
追答
用单线程就可以了,这种操作完全没有必要用多线程。
赋值性质的操作用多线程完全没必要。

多线程一般是用于与反应较慢的外设,比如打印机交流的时候。避免卡死。
另外,用于死循环进行监控和遍历的时候。

单纯的变量赋值没必要。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风语江滨柳
2019-02-19
知道答主
回答量:3
采纳率:0%
帮助的人:2646
展开全部

如楼主一定要这样做,可以在线程的开始和停止之后人为加个延时,比如10ms,等待系统将线程执行完成,如宏简系统较慢裤芹可以将时间稍蔽纯裤微设置长一些。如下所示:

Thread1.Start()

Thread2.Start()

Sleep(10)

Thread1.Abort()

Thread2.Abort()

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式