vb.net - 线程 System.NullReferenceException

标签 vb.net multithreading checkbox

我试图在选中或取消选中复选框时启动和停止自动检查功能。

    Private Sub CheckBoxautorefresh_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxautorefresh.CheckedChanged
    Dim AutoRefreshThread As Thread = Nothing
    If CheckBoxautorefresh.Checked Then
        AutoRefreshThread = New Threading.Thread(AddressOf Main.AutoRefresh)
        AutoRefreshThread.SetApartmentState(Threading.ApartmentState.STA)
        AutoRefreshThread.Start()
    Else
        AutoRefreshThread.Abort()
    End If
End Sub

当我选中复选框时,它会正常启动 AutoRefresh-Sub,并且可以正常工作。当我之后取消选择它时,我在这一行中收到 System.NullReferenceException:

   AutoRefreshThread.Abort()

自动刷新功能每 30 秒下载一个字符串。 我喜欢用复选框检查自动刷新的开/关。 但由于某种原因它不起作用。 有人可以帮我吗? :)

最佳答案

您正在 CheckedChanged 事件中定义线程:

Dim AutoRefreshThread As Thread = Nothing

当取消选中该复选框时,您将引用一个实际上尚未实例化的变量(仅在选中该复选框时才会发生)。您不再引用选中该复选框时创建的原始线程。

尝试在事件外部定义AutoRefreshThread

关于vb.net - 线程 System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22590528/

相关文章:

CSS Unchecked 选项卡功能问题

vb.net - 如何阻止 resharper 替换正确的代码?

c# - 无需查询即可从数据库获取数据

java - 链表迭代器抛出并发修改异常

c - Windows 10 上的多线程性能比 Linux 差得多

c++ - 为什么在将临时变量传递给线程函数时移动构造函数会被调用两次?

javascript - 如何创建复选框图像库

javascript - 选择所有选中的复选框返回所有复选框而不是使用 JQuery

c# - 如何用 C#(或 VB.NET)编写 WinMerge 插件

javascript - 如何在js代码中为vb变量添加值?