نهج Rapi: مثيل ثابت واحد لتطبيق WinForms بأكمله مقابل إنشاء وتوصيل وتصرف
-
27-09-2019 - |
سؤال
في العديد من الأماكن في تطبيقنا ، لدينا رمز مثل هذا:
using(RAPI rapi = new RAPI())
{
bool connected = TryToConnectWithTimeout(rapi);
if(connected)
DoSomethingWithRapi(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/Disnockonct تطلق النار خارج الترتيب.
هل من الأفضل أن يكون لديك مثال ثابت واحد فقط من Rapi للتطبيق بأكمله؟ هل لديك أي نصيحة أخرى؟ شكرًا.
المحلول
منطقيا ، Rapi هو اتصال واحد بين الكمبيوتر والجهاز. ليس من المنطقي أن يدعم تطبيقك اتصالات متعددة. سأصنع فئة المفرد يختتم هذا مكالمات Rapi ويجري جميع مكالماتك لك حتى يمر كل من يحتاج إلى التحدث إلى الجهاز عبر هذا الفصل.