Abordagem RAPI: 1 instância estática para todo o aplicativo WinForms vs criar, conectar, descartar
-
27-09-2019 - |
Pergunta
Em muitos lugares em nossa aplicação, temos código como este:
using(RAPI rapi = new RAPI())
{
bool connected = TryToConnectWithTimeout(rapi);
if(connected)
DoSomethingWithRapi(rapi);
}
Isso funcionou bem até agora. Nunca temos mais de uma instância do Rapi por vez. Até agora:
Mas agora queremos ouvir o evento Connect no Rapi. Estamos fazendo assim:
void StartMonitoringRapiConnection()
{
_rapi = new RAPI();
_rapi.RAPIConnected += new RAPIConnectedHandler(_rapi_RAPIConnected);
_rapi.RAPIDisconnected += new RAPIConnectedHandler(_rapi_RAPIDisconnected);
_rapi.Connect(false,-1);
}
private void _rapi_RAPIConnected()
{
DoWorkWhenRapiConnects();
}
private void _rapi_RAPIDisconnected()
{
//Listen for the next time that rapi connects
_rapi.Connect(false,-1);
DoWorkWhenRapiDisconnects();
}
"StartMonitoringRapPonection" funciona muito bem, desde que eu não comece a usar e conectar outros objetos RAPI. Mas uma vez que começo a recompor outros objetos RAPI, os eventos de conexão/desconexão parecem disparar fora de ordem.
Funcionaria melhor ter apenas uma instância estática do RAPI para todo o aplicativo? Você tem algum outro conselho? Obrigado.
Solução
Logicamente, o RAPI é uma única conexão entre o PC e o dispositivo. Não faz sentido para o seu aplicativo suportar várias conexões. Eu faria um Classe Singleton Isso encerra as ligações do Rapi e faz todas as suas chamadas para que todos que precisam conversar com o dispositivo passem por essa classe.