просто небольшая проблема с моей программой. Я работал в приложении устройства в VS2005 VB.Net. Эта программа будет работать на моем устройстве, которое будет подключаться к устройству Bluetooth. Это текущий код:Как заставить ShowDialog() не блокировать событие вызывающего абонента
В классе, который обрабатывает событие:
Public Class BluetoothDevice : Implements IRFID
'static instance of class
Public Shared _btDevice as BluetoothDevice
Private WithEvents bluetoothDevice as BRIReader
'This is the event handler
Private Sub BluetoothDevice_EventHandlerConnectionStateChanged(ByVal sender as Object, ByVal EvtArgs As EVTADV_DeviceConnectionStateEventArgs) handles bluetoothDevice.EventHandlerDeviceConnectState
Select Case EvtArgs.DeviceConnectState
Case EVTADV_DeviceConnectionStateEventArgs.CONNECTED
RaiseEvent OnReaderConnectionEventChanged(connectionState.Connected)
Case EVTADV_DeviceConnectionStateEventArgs.OFFLINE
RaiseEvent OnReaderConnectionEventChanged(connectionState.Offline)
Case EVTADV_DeviceConnectionStateEventArgs.RECONNECTING
RaiseEvent OnReaderConnectionEventChanged(connectionState.Reconnecting)
End Select
End Sub
End Class
В форме пользовательского интерфейса, который ловит RaiseEvent. Это также Основная форма:
Private Delegate Sub xOnReaderConnectEventChangeHandler(ByVal connState as connectionState)
Private Sub OnReaderConnectEventChangeHandler(ByVal connState as connectionState)
If Me.InvokeRequired Then
Me.Invoke(New xOnReaderConnectEventChangeHandler(AddressOf OnReaderConnectEventChangeHandler), connState)
Else
Select Case connState
Case connectionState.Connected
'_form here is a global object containing the form we ShowDialog()
If _form IsNot Nothing
_form.Dispose()
_form = Nothing
EndIf
Case connectionState.Offline
'haven't done anything yet
Case connectionState.Reconnecting
'show the form
_form.ShowDialog()
End Select
End If
End Sub
Теперь вот форма, которая будет пытаться подключить устройство. Это форма, которая подсчитывает время, прошедшее с момента переподключения состояния, и имеет кнопку «Отмена»:
Public Class FormReconnect
Private WithEvents _irfid as IRFID
Private Sub FormReconnect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'form load
'this method returns the instance of BluetoothDevice Class
_irfid = BluetoothDevice.GetInstance()
End Sub
'I also handle the event here since the caller form is not active
'This form SHOULD close when the connection is established
Private Delegate Sub xOnReaderConnectionEventChangeHandler(ByVal connState As connectionState)
Private Sub OnReaderConnectionEventChangeHandler(ByVal connState As connectionState) Handles _irfid.OnReaderConnectionEventChange
If Me.InvokeRequired Then
Me.Invoke(New xOnReaderConnectionEventChangeHandler(AddressOf OnReaderConnectionEventChangeHandler), connState)
Else
Select Case connState
Case connState.Connected
'I only handle the connected state. If Device is connected, close this form
Me.Close()
End Select
End If
End Sub
End Class
Ситуация, когда MainForm шоу, то я извлечь аккумулятор из устройства, их состояние соединения станет в автономном режиме, а затем снова подключиться, затем отобразится форма повторного подключения. Проблема заключается в том, что при повторном подключении формы с помощью метода ShowDialog()
класс, обрабатывающий событие (BluetoothDevice
), не будет запущен, даже если состояние соединения с устройством уже Connected
(отображается на устройстве с мигающим светом). Похоже, что ShowDialog()
пересоздания формы блокирует класс, потому что, когда я нажимаю кнопку отмены, и повторное соединение формы закрывается, будет вызываться обработчик событий BluetoothDevice
. Что будет лучшим обходным решением здесь? Я пробовал Show()
, он запускает событие, но он обрабатывается как вызывающим, так и формой повторно подключаться, заставляя форму повторно подключаться, не показывая основную форму.
EDIT 1: То, что я хочу, чтобы это сделать, когда я ShowDialog()
и форму Переустановка активен (таким образом, форма Main «скрыта» под переподключением), форма Переустановка будет обрабатывать событие, выращенные в BluetoothDevice
Класс.
РЕДАКТИРОВАТЬ 2: Когда активна функция реконфигурации формы. BluetoothDevice
не вызывает никаких событий. Думайте, что он блокируется ShowDialog()
. Таким образом, Form Reconnect не закрывает даже состояние соединения «Подключено».
@JawadZeb попробовал 'Show()', и когда обработчик события поднял события, как Form Main, так и Form Reconnects обрабатывают его (сначала сначала, затем повторно подключайтесь), удаляя форму, оставляя мое приложение без активной формы (даже основная форма больше не отображается, не знаю почему). – Gatherer