我正在开发一个VB.Net项目,我想要一个快速而又脏的方法让第二个线程预先形成一些函数,然后将一些变量结果存储到会话中。然后我想从第一个线程(当然在同一个会话中)访问该变量。
以下是代码示例...
按钮#1
Sub button_Click1(byVal sender As Object, ByVal e As Event Args)
textfield1.Visible = False
lable2.Visible = True
textfield2.Visible = True
button_Click2.Visible = True
Dim thread2 As New System.Threading.Thread(AddressOf foothread)
thread2.Start(textfield1.Text.ToString)
End Sub
按钮#2
Sub button_Click2(byVal sender As Object, ByVal e As Event Args)
If(textfield2.Text = "is cool" And System.Web.HttpContext.Current.Session("myBool") = true) Then
lable2 = "You're right!"
else
lable2 = "???"
end If
线程#2
Public Sub thread2(ByVal str1 As String)
If(srt1 = "Stack/Flow") Then
System.Web.HttpContext.Current.Session("myBool") = true
Else
System.Web.HttpContext.Current.Session("myBool") = false
End If
End Sub
显然这不是一个真实的生产示例,我在线程中运行了一个冗长的查询,它将返回我的会话变量(由于网络流量到该框,所以很长)
这可能吗?有没有更好的办法?这甚至会起作用吗? 多线程应用程序的新手。
谢谢!
答案 0 :(得分:1)
不,这不起作用。第二个线程没有HTTP上下文,只有运行来处理请求的线程才有HTTP上下文。
您可以为该方法创建一个类以在第二个线程中运行,并将任何输入和输出数据添加为类中的成员:
Public Class Thread2Class
Public Str1 As String
Public MyBool As Boolean
Public Sub Run()
If Str1 = "Stack/Flow" Then
MyBool = True
Else
MyBool = False
End If
End Sub
End Class
创建类的实例,设置输入数据,然后启动线程:
Dim thread2 As New Thread2Class
thread2.Str1 = Lable1.Text.ToString
Dim thread2 As New System.Threading.Thread(AddressOf thread2.Run)
thread2.Start()
保留对类的引用,以便在线程完成时可以从成员中读取结果:
Dim result As Boolean = thread2.MyBool