Дайте это попробовать, это лучшее, что я мог придумать до сих пор. Я использовал фоновых работников только потому, что они просты в использовании.
В основном это нить в потоке, которая, по крайней мере, будет поддерживать ваш пользовательский интерфейс, судя по тому, что вы сказали, вероятно, вы должны использовать потоки для всех функций коммуникационных функций в любом случае, если диск теряет связь по какой-либо причине, приложение запущено.
Это некрасиво, но, по крайней мере, вы сможете выйти из него раньше, чем функция CAN сама по себе исчерпала себя.
Private connected As Boolean
Private Sub bwTryConnect_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTryConnect.DoWork
Dim timeout As Boolean
Dim timeoutCount As Integer
Dim timeoutValue As Integer = 5 ' timeout value
bwConnect.RunWorkerAsync() ' start worker to try connection
While bwConnect.IsBusy And Not timeout
Thread.Sleep(1000) ' wait a second
timeoutCount += 1 ' increment timeout value
If timeoutCount = timeoutValue Then timeout = True ' connection timed out
End While
' connected will be true if the try connection worker completed (connection to drive ok) before the timeout flag was set, otherwise false
connected = Not timeout
End Sub
Private Sub bwConnect_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwConnect.DoWork
' use your CAN library function here - either a simple connect command or just try reading an arbitary value from the drive
' if you want to test this, uncomment one of the following lines:
'Thread.Sleep(20000) ' simulate timeout
'Thread.Sleep(2000) ' simulate connect
End Sub
Очевидно, что вы звоните по телефону bwTryConnect.RunWorkerAsync()
.
Не зная структуры библиотеки, это неясно, но мне интересно, можно ли создать подкласс библиотеки и изменить продолжительность тайм-аутов? – ChicagoMike
Было бы замечательно, если бы я мог, но, к сожалению, мой уровень экспертизы, сама библиотека является равными частями тайной и непонятной. Длительность тайм-аута, по-видимому, не является параметром, доступным пользователю для изменения и выглядит жестко. – user3896248
Я чувствую вашу боль. Попытка иметь дело с каким-либо конкретным оборудованием поставщиков изнутри VB - это в значительной степени огромная боль в дыре, я получил от этого зла, пытаясь поговорить с процессорами AB ControlLogix, которые в конце концов я написал свой собственный драйвер Ethernet/IP comms. Просто из интереса, с каким оборудованием вы пытаетесь общаться? –