【问题标题】:background worker cannot read variable from other form后台工作人员无法从其他形式读取变量
【发布时间】:2014-11-27 16:37:33
【问题描述】:

我有我的主窗体,称为 home。

Home 有一个名为“activeuser”的公共变量。 此变量是一个字符串,其中包含用户名,例如“John Smith”。

我的其他表单之一“caseupdate”有一个由计时器触发的后台工作人员。 此后台工作人员检查 MySQL 数据库以查找新记录,特别是“分配”给登录用户的记录。

我认为这很简单,在我的 SQL 语句中,我只是这样做了......

    dim currentuser as string = home.activeuser

这根本不起作用,我不知道如何将用户名值输入后台工作人员以使一切正常。

感谢任何帮助! :)

【问题讨论】:

  • 首先,您的描述并不完全合理。在 BGW 启动之前,您需要为 DoWork 设置一些内容。不,BGW 不能从另一个线程读取 - 它只提供反馈。
  • 抱歉,我应该更清楚。 BGW 代码位于 DoWork 位中。我有一个计时器,它检查 bgq 是否忙,如果没有,则运行“CaseListUpdater.RunWorkerAsync()”。那么如何以随机形式从变量中获取信息位到后台工作人员中呢?
  • 最好在模块中定义activeuserPublic activeuser as String,并在登录后进行赋值:activeuser = "John Smith"activeuser在任何形式的项目中可见。
  • “没用”是什么意思?你有错误信息吗?线程与其他线程通信的一种方式是使用事件。
  • 所以没有工作我的意思是 SQL 查询没有拉回任何记录,因为它没有'WHERE assignmentto =John Smith',而是'WHERE assignmentto =""'。

标签: vb.net variables backgroundworker


【解决方案1】:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Me.RunWorker()
End Sub

Private Sub RunWorker()
    If Not Worker.IsBusy Then
        Me.Worker.RunWorkerAsync("Pablo")
    End If
End Sub

Private Sub Worker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles Worker.DoWork
    Dim result As Boolean
    If e.Argument = "root" Then
        result = True
    Else
        result = False
    End If
    e.Result = result
End Sub

Private Sub Worker_Completed(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Worker.RunWorkerCompleted
    MsgBox(e.Result)
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多