vb.net 多线程问题

peterspan 2018-05-30 01:00:49
   For i = 0 To a.Count - 1
wbh(i) = New wbclass
wbthread(i) = New Thread(AddressOf wbh(i).wb)
wbthread(i).SetApartmentState(ApartmentState.STA)
wbthread(i).Start()
wbthread(i).Join()
RichTextBox1.Text = RichTextBox1.Text & vbCrLf & wbH(i).rHTML
Next



试运行,wbthread(i) = New Thread(AddressOf wbh(i).wb)
这一句错误。 提示System.NullReferenceException:“未将对象引用设置到对象的实例。”

请问大神如何改造才能成功运行?

...全文
1172 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulilittle 2018-06-05
  • 打赏
  • 举报
回复
引用 18 楼 qq_36788663 的回复:
[quote=引用 12 楼 liulilittle 的回复:] [quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 谢谢您了[/quote] 不用谢!
  • 打赏
  • 举报
回复
引用 6 楼 yangliu0512 的回复:
[quote=引用 5 楼 sp1234 的回复:] 要复制变量。例如
   For i = 0 To a.Count - 1
            Dim j = i
            wbh(i) = New wbclass
            wbthread(i) = New Thread(AddressOf wbh(j).wb)
这里要使用 j 而不是 i,这是多线程编程的一个基本的知识。
额,这是什么原理?[/quote]不然你可能全部都在处理最后一个I,没什么原理的,你自己想想能想通就行。
  • 打赏
  • 举报
回复
对象实例的 wb 方法/委托并不存在具体内容,这个自然是调试时应该能够看到的。你只要看看出错时异常信息就知道是哪一个变量为 null。 后边看到的是另外一个问题,但是对于多线程编程时特别需要注意逻辑歧义,wbh(i) 这里的 i 是变量,是异步读取这个变量值的,而这个变量值是变动的,所以会有逻辑歧义。要避免歧义就要使用“不变的”变量 j。
FainSheeg 2018-06-04
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
要复制变量。例如
   For i = 0 To a.Count - 1
            Dim j = i
            wbh(i) = New wbclass
            wbthread(i) = New Thread(AddressOf wbh(j).wb)
这里要使用 j 而不是 i,这是多线程编程的一个基本的知识。
额,这是什么原理?
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 12 楼 liulilittle 的回复:
[quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 谢谢您了
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 15 楼 liulilittle 的回复:
[quote=引用 14 楼 qq_36788663 的回复:] [quote=引用 12 楼 liulilittle 的回复:] [quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 那请问重绘的问题怎么解决啊[/quote] 你仔细的检查一下,你的代码在哪里释放了这些正在被使用的资源。然后把它们处理好就可以了。 上面已经提到了 主要是释放了这些被使用的资源 造成的问题呀![/quote] 是不是数据库conn 和close太频繁也不行
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 15 楼 liulilittle 的回复:
[quote=引用 14 楼 qq_36788663 的回复:] [quote=引用 12 楼 liulilittle 的回复:] [quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 那请问重绘的问题怎么解决啊[/quote] 你仔细的检查一下,你的代码在哪里释放了这些正在被使用的资源。然后把它们处理好就可以了。 上面已经提到了 主要是释放了这些被使用的资源 造成的问题呀![/quote] 我没有手动释放过 您能帮忙看一下这是什么情况吗
liulilittle 2018-06-04
  • 打赏
  • 举报
回复
引用 14 楼 qq_36788663 的回复:
[quote=引用 12 楼 liulilittle 的回复:] [quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 那请问重绘的问题怎么解决啊[/quote] 你仔细的检查一下,你的代码在哪里释放了这些正在被使用的资源。然后把它们处理好就可以了。 上面已经提到了 主要是释放了这些被使用的资源 造成的问题呀!
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 12 楼 liulilittle 的回复:
[quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 但是我看报错上,反映的是我在try catch环节有问题,在try 执行之后未能收集详细信息,然后就是参数无效
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 12 楼 liulilittle 的回复:
[quote=引用 11 楼 qq_36788663 的回复:] [quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。[/quote] 那请问重绘的问题怎么解决啊
liulilittle 2018-06-04
  • 打赏
  • 举报
回复
引用 11 楼 qq_36788663 的回复:
[quote=引用 10 楼 liulilittle 的回复:] wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因[/quote] 你想说“参数无效”这个问题啊,这个问题在winform上经常容易出现 它是因为你的应用处理不当造成的哦。 ----------------------- 主要 与GDI+重绘时相关,问题发生源点一般为: 1、图片被释放 2、字体被释放 ---------------------------------------------------------------- 如果不是自己写的控件或第三方控件,用的是微软提供的.NET原生控件的话,问题主要发生原因如上。
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 10 楼 liulilittle 的回复:
wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
请问程序运行一段时间之后,application.run参数异常是什么原因
qq_36788663 2018-06-04
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
对象实例的 wb 方法/委托并不存在具体内容,这个自然是调试时应该能够看到的。你只要看看出错时异常信息就知道是哪一个变量为 null。 后边看到的是另外一个问题,但是对于多线程编程时特别需要注意逻辑歧义,wbh(i) 这里的 i 是变量,是异步读取这个变量值的,而这个变量值是变动的,所以会有逻辑歧义。要避免歧义就要使用“不变的”变量 j。
您好,请问这是怎么回事
liulilittle 2018-06-04
  • 打赏
  • 举报
回复
wbthread,wbh(i).wb它们之中某个访问的引用可能是NULL,你可以向上追述代码两者发生NULL的原因
  • 打赏
  • 举报
回复
要复制变量。例如
   For i = 0 To a.Count - 1
            Dim j = i
            wbh(i) = New wbclass
            wbthread(i) = New Thread(AddressOf wbh(j).wb)
这里要使用 j 而不是 i,这是多线程编程的一个基本的知识。
peterspan 2018-06-01
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
调试程序啊,看看那个对象为null
类单独实例化,调试没有问题。 放到多线程执行,就会报错。调试看不到内容……
peterspan 2018-06-01
  • 打赏
  • 举报
回复
引用 1 楼 zj_zwl 的回复:
wbh(i).wb是什么
wbclass是一个自定义类,功能为使用webbrowser分析网页,wb为wbclass的子过程。 wbh为该类的实例。
exception92 2018-05-30
  • 打赏
  • 举报
回复
调试程序啊,看看那个对象为null
zj_zwl 2018-05-30
  • 打赏
  • 举报
回复
wbh(i).wb是什么

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧