Оқиғалар/хабарлар үшін қашан тіркелу/тіркеуден өту керек

Өтініштегі оқиғалар мен хабарларды қарап жатырмын, бірақ олардың өмірлік циклында және олар үшін тіркелу керек болғанда сенімді емеспін.

Қазіргі уақытта конструкторда хабарламаларды алу үшін тіркелемін (немесе оқиғалар өңдегіштерін). Мен қателеспеймін деп ойламаймын

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

Hwever қосымшасында Telerik басқару элементтерін қолданамын (бұл басқа басқару элементтерінде орын алуы мүмкін) және менде негізгі экранның терезесі бар. Терезенің өзі жабық болып көрінсе де, мен экраннан босатылған кезде және басқа уақытта Unloaded және Loaded оқиғалары іске қосылады.

Сондықтан Unloaded ішінен тіркелмеген болсам, ол мәселе тудырады. Міне, мен мұны немен істеу керек?

0

2 жауаптар

Жалпы, мен келісемін D. жауап , бірақ жүктелген және босатылған оқиға өңдегіш бірнеше рет қоңырау шалған кейбір жағдайлар бар. Мен тіркелуден бұрын тексеру үшін bool айнымалысын қосу арқылы осы мәселені шешемін.

Мысал код:

bool _hasRegistered;//default value is false

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

OnUnloaded()
{
   //your un-register code here
}
2
қосылды
Жақсы идея. Кейде қарапайым нәрселер мені құтқарады.
қосылды автор Jay, көзі

Жалпы айтқанда, іс-шараларды тіркеуден шығарып тастаймын, олар өздеріне сәйкес келмейтіндіктен, әртүрлі болуы мүмкін. Егер түсіру орын алса және терезе тұрса, онда жүк жүктеледі (айтқаныңыздай). Бұл жағдайда оларды жүктеуге тіркеп, түсірілімнен шығарып тастаңыз. Бұл сәйкестікке кепілдік беруі керек. Мен userControl/page қызмет ету мерзіміне қажет болса, оны пайдалануға болатын жүктеуден гөрі жақсы оқиға көрмеймін.

2
қосылды
Мен сіздердің іс-әрекеттеріңізді жасайтынына сенімді емеспін, бірақ егер оның сыртында сіз оны сыртынан тіркей алсаңыз және ішіндегі әдіс шақырсаңыз. Егер оқиға оқиға болып табылса, онда бұл басқару/парақта болғанда, олармен ешқандай проблемалар болмауы керек, себебі олар бақылау кезінде жойылуға тиіс (бірақ менің тіркелуімді тіркеп тастағым келеді). Алайда, жалпы алғанда, бұл сіздің сұрағыңызға жауап бермейді :(
қосылды автор Jay, көзі
Сіз қандай оқиғаға тіркелесіз? Ол немен байланысты? Мен оны тікелей терезе/бет/басқару элементіне байланған болса, оның қайта жүктелуі кезінде өртенбеуі мүмкін деп ойлауға болмайды. (мысалы, басқару)
қосылды автор Jay, көзі
Мен бұрын айтқанымды қайтарамын. Егер XMPP серверінен алу үшін оқиға жарияланатын болса, терезе/басқару элементі толығымен жабылған кезде ол оқиғалар өңдегіштері осы объект аумағынан шығып, қоқыс жиналғанша қалады. Сіз қолданыстағы ашық терезелердің тізімін сақтайсыз ба? Егер солай болса, менің ойымша, сіз өзіңіздің терезелеріңізді қадағалап отыратын әдістерге тіркелуді және тіркеуді алып тастауды жоспарлап отырсыз.
қосылды автор Jay, көзі
Міне, менің көзқарасым бойынша, бұл оқиғадан кейінгі оқиғалар тіркелуден бас тартқан жағдайда, оны жоғарылату және жоғалту мүмкін.
қосылды автор Firedragon, көзі
Бұл XMPP серверінен жіберілген хабар еді, сондықтан, өкінішке орай, ол қайтадан жүктеліп тұрғанда, өртенуі мүмкін
қосылды автор Firedragon, көзі