getwayworker timer_使用DistpatcherTimer重复BackgroundWorker任务

我试图找出解决这个问题的最佳方法。

我有一个BackgroundWorker被用来在定时器上建立套接字连接。

Public Shared AllUsersWorker As New BackgroundWorker

Public Shared AllUsersWorkerTimer As New DispatcherTimer

AllUsersWorkerTimer.Interval = TimeSpan.FromSeconds(2)

AllUsersWorkerTimer.Start()

AddHandler AllUsersWorkerTimer.Tick, AddressOf All_Users_Worker_Timer_Tick

Public Shared Sub All_Users_Worker_Timer_Tick()

AllUsersWorker.RunWorkerAsync()

End Sub

Public Shared Sub AllUsersWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)

tcpClient = New TcpClient

tcpClient.Connect("localhost", 9999)

networkStream = tcpClient.GetStream

If networkStream.CanWrite And networkStream.CanRead Then

Read_All_Connections()

End If

tcpClient.Close()

End Sub我想启动BackgroundWorker线程,它建立TCP连接,读取/写入一些数据,然后关闭连接并每2秒重复一次。

我想每次物理地打开/关闭连接,因为有时我连接的服务器不发送数据,readByte调用暂停等待数据,并且在我重置程序之前进程无法继续(因此想要使用不同的线程到我的用户界面)。

此刻,我正在尝试使用间隔为2秒的DispatcherTimer来调用Worker.RunWorkerAsync。当调用RunWorkerAsync时,DoEvents方法运行 - 第一次工作正常,但后来的DispatcherTimer打勾的我发现前一个线程没有关闭,因此在调用RunWorkerAsync时我得到

"This BackgroundWorker is currently busy and cannot run multiple tasks

concurrently"

我能达到这个目标的最好方法是什么?

有没有更好的办法?

编辑:思考它。如果我能以某种方式构建一个看门狗,这将是一件好事,因此如果发现BackgroundWorker线程运行超过2秒钟,它将被终止,因为这表示线程已被tcp连接阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值