Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从后台线程访问主线程数据_Vb.net_Multithreading_Asynchronous - Fatal编程技术网

Vb.net 从后台线程访问主线程数据

Vb.net 从后台线程访问主线程数据,vb.net,multithreading,asynchronous,Vb.net,Multithreading,Asynchronous,我正在使用backgroundworker来处理数据,而用户仍然可以自由地单击另一个按钮来中止处理。 但是,backgroundworker中的代码需要几段数据,例如,它需要知道是否选中了单选按钮 有没有办法从后台线程访问另一个线程中的数据?或者我应该创建保存这些信息的全局变量吗 Public Class Test Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) H

我正在使用backgroundworker来处理数据,而用户仍然可以自由地单击另一个按钮来中止处理。 但是,backgroundworker中的代码需要几段数据,例如,它需要知道是否选中了单选按钮

有没有办法从后台线程访问另一个线程中的数据?或者我应该创建保存这些信息的全局变量吗

Public Class Test
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Content = "Working..."
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        If RadioButton1.IsChecked Then
           MsgBox("It works")
        End If
    End Sub
End Class

您可以将RadioButton选中状态传递给RunWorkerAsync方法,如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    BackgroundWorker1.RunWorkerAsync(RadioButton1.Checked)
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Dim checked As Boolean = CBool(e.Argument)
    If checked Then
        MessageBox.Show("It works")
    End If
End Sub

如果您需要从循环内部连续检查RadioButton,请告诉我,因为这会有所不同。

您可以将RadioButton检查状态传递给RunWorkerAsync方法,如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    BackgroundWorker1.RunWorkerAsync(RadioButton1.Checked)
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Dim checked As Boolean = CBool(e.Argument)
    If checked Then
        MessageBox.Show("It works")
    End If
End Sub

如果您需要从循环内部连续检查单选按钮,请告诉我,因为这会有所不同。

您是指数据还是UI控件?如果/当单击按钮或某物时,您可以从UI线程中止工作程序,并在
dowworkeventargs
中传递所需的数据,如布尔值,您是否只需要知道BackgroundWorker启动时RadioButton的状态?…还是需要在其处理过程中不断检查状态(并改变正在发生的事情,可能是一个循环)?您指的是数据还是UI控件?如果/当单击按钮或某事时,您可以从UI线程中止worker并传递它所需的数据,如
DoWorkEventArgs
中的布尔值,您是否只需要知道BackgroundWorker启动时RadioButton的状态?…还是需要在其处理过程中不断检查状态(并改变正在发生的事情,可能是循环)?