Voqealar/xabarlar uchun qachonki ro'yxatdan o'tishingiz kerak

Men arizamdagi voqealar va xabarlarga qarayman, lekin ularning hayotiy davrida ishonchim komil emas, ular uchun ro'yxatdan o'tish kerak.

Hozirgi vaqtda men konstruktorda xabarlarni (yoki hodisalarni bajaruvchilarni) olish uchun ro'yxatdan o'taman. Men xato qilmoqchi bo'lsam-da, ro'yxatdan o'tishni bekor qilmayman

For example in this posting: MVVM Messaging vs RaisePropertyChanged it says to deregister on the Unloaded event.

Hendim men dasturda Telerik boshqaruvini qo'llayapman (u boshqa boshqaruvlarda bo'lishi mumkin) va menda asosiy oynada oyna bor. Men ekranni bo'shatganimda va boshqa paytlarda Unloaded va Loaded voqealari tetiklansa ham, bu oyna yopilmaydi.

Shuning uchun Unloaded ilovasida ro'yxatdan o'tishni bekor qilsam, bu muammo yuzaga keladi. Shunday qilib, men buni qanday qilishim kerak?

0

2 javoblar

Umuman olganda, men " D» ning javobiga roziman. lekin Loaded and Unloaded voqea işleyicisi bir necha marta qo'ng'iroq qilgan ba'zi holatlar mavjud. Ro'yxatdan o'tishdan oldin tekshirish uchun bool o'zgaruvchini qo'shish orqali ushbu muammoni hal qilaman.

Misol kodi:

bool _hasRegistered;//default value is false

OnLoaded()
{
    //
    if (!this._hasRegistered)
    {
       //your register code here
        this._hasRegistered = true;
    }
}

OnUnloaded()
{
   //your un-register code here
}
2
qo'shib qo'ydi
Yaxshi fikr. Ba'zida eng oddiy narsa meni qochib ketadi.
qo'shib qo'ydi muallif Jay, manba

Umuman olganda, voqea-hodisalarni ro'yxatdan o'tkazaman, ular endi o'zlarini qiziqtirayotganligini bilishim bilan farq qiladi. Agar tushirilsa va derazada qolsa, unda yuk ham sodir bo'layotganini anglatadi (aytib o'tganingizdek). Bunday holda, ularni yukga yozib qo'ying va ularni olib tashlang. Buning tasdig'ini kafolatlash kerak. UserControl/page ning ishlash muddati uchun kerak bo'lganda sizdan foydalanishni bekor qilishdan ko'ra yaxshiroq voqea ko'rmadim.

2
qo'shib qo'ydi
Voqeani nima ishlab chiqarayotganiga ishonchim komil emas, lekin agar uning tashqarisidan tashqarida ro'yxatga olsangiz va ichki usulni chaqirsangiz. Agar hodisaning bir qismi bo'lsa, u nazorat/sahifada bo'lsa, u holda ular bilan bog'liq muammolar bo'lmasligi kerak, chunki ular nazorat ostida bo'lganda yo'q bo'lishi kerak (garchi men ro'yxatdan o'tgan narsalarni ro'yxatdan o'tkazishni afzal ko'rsam-da). Ammo, umuman, bu sizning savolingizga javob bermaydi :(
qo'shib qo'ydi muallif Jay, manba
Qanday voqea ro'yhatdan o'tyapsiz? U nima bilan bog'langan? Agar men uni to'g'ridan-to'g'ri derazangizga/sahifaga/tekshirishga bog'langan bo'lsa, uni qayta tiklashda alangalanib qolmasligi uchun yordam berolmayman deb o'ylayman. (masalan, nazorat)
qo'shib qo'ydi muallif Jay, manba
Men ilgari aytgan narsamni qaytarib olaman. Voqeani XMPP serveridan qabul qilish uchun nashr etadigan narsa, sizning oyna/boshqaruvingiz to'liq yopilganda, o'sha ob'ektni ishga tushiruvchilar ushbu obyekt qamrab olinmaguncha va axlat yig'ilguncha qolaveradi. Mavjud ochiq derazalar ro'yxatini saqlaysizmi? Agar shunday bo'lsa, men ro'yxatdan o'tishni va voqealarni ro'yxatdan o'tkazishni ko'chirishga to'g'ri keladi, deb o'ylayman.
qo'shib qo'ydi muallif Jay, manba
Bu erda ko'zda tutilgan muammoning shundan iboratki, voqea-hodisalar ro'yxatga olinmagani sababli, uni ko'tarish va o'tkazib yubormaslik mumkin.
qo'shib qo'ydi muallif Firedragon, manba
Bu XMPP serveridan yuborilgan xabar bo'lib qoladi, shuning uchun afsuski, u qayta tiklanishi bilan o'chirilishi mumkin
qo'shib qo'ydi muallif Firedragon, manba