多线程应用程序中的System.ObjectDisposedException

特斯拉K20

我正在编写一个简单的程序来测试VB.NET的各种功能,以后将在一个更复杂的程序中使用它。这个想法是通过串口com5发送一条消息。该消息将从应用程序文本框中输入的内容中提取。后台工作者(当按下标记为“发送”的按钮时被激活)连续发送消息。还有一个标签,什么都不做。

Imports System.ComponentModel

Public Class Form1

Dim message

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    message = TextBox1.Text
    If BackgroundWorker1.IsBusy = False Then
        BackgroundWorker1.RunWorkerAsync()
    End If
End Sub

Sub SendSerialData(ByVal data As String)
    ' Send strings to a serial port. 
    Try
        Using com5 As IO.Ports.SerialPort =
        My.Computer.Ports.OpenSerialPort("COM5")
            com5.WriteLine(data)
        End Using
    Catch ioex As System.IO.IOException
        TextBox1.Text = ("COM5 Not Found!")
    End Try
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    While (True)
        SendSerialData(message)
    End While
End Sub
End Class

最初,我使用Application.DoEvents(),但是速度很慢,而且我听说这是一种不好的编程习惯。(但是,这没有错误。)因此,我使用后台工作程序重写了该程序。现在,该程序在运行时运行良好,但是在关闭时会弹出:

未处理System.ObjectDisposedException消息:mscorlib.dll中发生了类型为'System.ObjectDisposedException'的未处理异常其他信息:安全句柄已关闭

我认为这与后台工作程序有关,因为如果程序已关闭并且我尚未运行后台工作程序,则不会出现该错误。我尝试将try-catch放置在程序的每个子程序中(包括将SendSerialData中的catch的异常类型更改为任何异常),无济于事。如果出现问题,这是我的第一篇文章。

杰克逊

您需要做的是向BackgroundWorker1_DoWork线程发出信号,表明该程序正在关闭,以便可以正确整理。.NET框架中的BackgroundWorker类已经知道该怎么做。

您需要执行以下操作:

  • 使用BackgroundWorker运行任务
  • 配置BackgroundWorker以接受取消请求
  • 在后台任务中更改While循环以检查是否取消
  • 退出程序后,请求取消后台任务,然后等待线程完成。

注意:BackgroundWorker上的MSDN页面上有一个示例,它几乎可以完全满足您的要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多线程在Web应用程序中的作用

来自分类Dev

在多线程c#应用程序中嵌入Python

来自分类Dev

实体框架中具有虚拟属性的System.ObjectDisposedException

来自分类Dev

多线程应用程序中的死锁检测

来自分类Dev

System.ObjectDisposedException not treated in facebook windows phone app

来自分类Dev

Facebook Windows Phone应用程序未处理System.ObjectDisposedException

来自分类Dev

ILGenerated方法中的System.ObjectDisposedException

来自分类Dev

多线程应用程序中的QTimer

来自分类Dev

ncurses在多线程应用程序中

来自分类Dev

如何在IntelliJ中调试多线程应用程序?

来自分类Dev

WebSocket通信引发System.ObjectDisposedException

来自分类Dev

在多线程应用程序中划分大文件?

来自分类Dev

在WinForms应用程序中将按钮样式设置为FlatStyle.System时,出现System.ObjectDisposedException

来自分类Dev

尚未处理userManager.CreateAsync System.ObjectDisposedException

来自分类Dev

多线程应用程序中的Apache HttpClient和HttpConnection

来自分类Dev

SignalR:带有计时器的System.ObjectDisposedException

来自分类Dev

Docker容器中的.net核心控制台应用程序引发System.ObjectDisposedException

来自分类Dev

ZeroMQ处理多线程应用程序中的中断

来自分类Dev

在多线程应用程序中锁定和解锁

来自分类Dev

多线程应用程序中的DLL和类

来自分类Dev

多线程应用程序中的日志队列

来自分类Dev

多线程应用程序中的静态方法

来自分类Dev

System.ObjectDisposedException:ObjectContext实例已被处置,不能再被处置

来自分类Dev

Xamarin方法的Newtonsoft Json和System.ObjectDisposedException

来自分类Dev

在测试中读取请求HttpContent时出现ObjectDisposedException

来自分类Dev

.net 核心 IsInRoleAsync 'System.ObjectDisposedException'

来自分类Dev

如何在多线程应用程序中存储线程

来自分类Dev

JulMar 的 ATAPI 中的 LineMakeCall 抛出 ObjectDisposedException

来自分类Dev

调用 Close 后抛出 System.ObjectDisposedException

Related 相关文章

  1. 1

    多线程在Web应用程序中的作用

  2. 2

    在多线程c#应用程序中嵌入Python

  3. 3

    实体框架中具有虚拟属性的System.ObjectDisposedException

  4. 4

    多线程应用程序中的死锁检测

  5. 5

    System.ObjectDisposedException not treated in facebook windows phone app

  6. 6

    Facebook Windows Phone应用程序未处理System.ObjectDisposedException

  7. 7

    ILGenerated方法中的System.ObjectDisposedException

  8. 8

    多线程应用程序中的QTimer

  9. 9

    ncurses在多线程应用程序中

  10. 10

    如何在IntelliJ中调试多线程应用程序?

  11. 11

    WebSocket通信引发System.ObjectDisposedException

  12. 12

    在多线程应用程序中划分大文件?

  13. 13

    在WinForms应用程序中将按钮样式设置为FlatStyle.System时,出现System.ObjectDisposedException

  14. 14

    尚未处理userManager.CreateAsync System.ObjectDisposedException

  15. 15

    多线程应用程序中的Apache HttpClient和HttpConnection

  16. 16

    SignalR:带有计时器的System.ObjectDisposedException

  17. 17

    Docker容器中的.net核心控制台应用程序引发System.ObjectDisposedException

  18. 18

    ZeroMQ处理多线程应用程序中的中断

  19. 19

    在多线程应用程序中锁定和解锁

  20. 20

    多线程应用程序中的DLL和类

  21. 21

    多线程应用程序中的日志队列

  22. 22

    多线程应用程序中的静态方法

  23. 23

    System.ObjectDisposedException:ObjectContext实例已被处置,不能再被处置

  24. 24

    Xamarin方法的Newtonsoft Json和System.ObjectDisposedException

  25. 25

    在测试中读取请求HttpContent时出现ObjectDisposedException

  26. 26

    .net 核心 IsInRoleAsync 'System.ObjectDisposedException'

  27. 27

    如何在多线程应用程序中存储线程

  28. 28

    JulMar 的 ATAPI 中的 LineMakeCall 抛出 ObjectDisposedException

  29. 29

    调用 Close 后抛出 System.ObjectDisposedException

热门标签

归档