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上每次运行的结果都不一样
等多种情况,这是为什么啊 展开
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上每次运行的结果都不一样
等多种情况,这是为什么啊 展开
2个回答
展开全部
你真心无聊。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。
主线程只是通知系统,请启动一个线程运行某某函数。
而哪个线程先运行笑盯伍完全在则则系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没碰或有启动起来,所以你会遇到两个变量都是空值这种情况。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。
主线程只是通知系统,请启动一个线程运行某某函数。
而哪个线程先运行笑盯伍完全在则则系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没碰或有启动起来,所以你会遇到两个变量都是空值这种情况。
追问
那我如何实现每次都有值呢
追答
用单线程就可以了,这种操作完全没有必要用多线程。
赋值性质的操作用多线程完全没必要。
多线程一般是用于与反应较慢的外设,比如打印机交流的时候。避免卡死。
另外,用于死循环进行监控和遍历的时候。
单纯的变量赋值没必要。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询