Подход RAPI: 1 Статический экземпляр для всего приложения WinForms VS Создание, Connect, Dissose
-
27-09-2019 - |
Вопрос
Во многих местах в нашем приложении у нас есть код, как это:
using(RAPI rapi = new RAPI())
{
bool connected = TryToConnectWithTimeout(rapi);
if(connected)
DoSomethingWithRapi(rapi);
}
Это работало хорошо. У нас никогда не было более 1 экземпляра RAPI за раз. До настоящего времени:
Но теперь мы хотим слушать событие Connect на Rapi. Мы делаем это так:
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();
}
«StartMoniToringRapiconnection» работает довольно хорошо, если я не начинаю новых и подключающую другие объекты RAPI. Но как только я начну начать новые объекты RAPI, события Connect / Disconnect, кажется, выходили из строя.
Будет ли работать лучше, чтобы иметь всего 1 статический экземпляр RAPI для всего приложения? У вас есть какие-либо другие советы? Спасибо.
Решение
Логично, Rapi - это одно соединение между ПК и устройством. Ваше приложение не имеет смысла даже поддерживать несколько соединений. Я бы сделал Singleton Class. Это касается звонков RAPI и делает все ваши звонки для вас, чтобы все, что нужно поговорить с устройством, проходит через этот класс.