Odsubskrybowanie eventu

Odsubskrybowanie eventu
bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1683
0

Hej, zastanawiam się jak odsubskrybować taki lub podobny event:

Kopiuj
wbPrzegladarka.FrameLoadEnd += async (sender, args) =>
            {
                //Wait for the Page to finish loading
                if (args.Frame.IsMain)
                {
                    await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
                }
            };

W tym przypadku, gdy już strona zostanie załadowana, nie powinien być odpalany ponownie. Nie bardzo wiem jak to ogarnąć z eventem subskrybowanym lambdą.

FU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0

Musisz mieć referencję do handlera, nie znam innego sposobu.

Kopiuj
var handler = async (sender, args) =>
{
	//Wait for the Page to finish loading
	if (args.Frame.IsMain)
	{
		await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
	}
};

wbPrzegladarka.FrameLoadEnd += handler;
wbPrzegladarka.FrameLoadEnd -= handler;

Ewentualnie możesz odsubskrybować wszystkie eventy, ale w tym przypadku byłoby to dziwne rozwiązanie.

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1683
0
Fuffu napisał(a):

Musisz mieć referencję do handlera, nie znam innego sposobu.

Kopiuj
var handler = async (sender, args) =>
{
	//Wait for the Page to finish loading
	if (args.Frame.IsMain)
	{
		await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
	}
};

wbPrzegladarka.FrameLoadEnd += handler;
wbPrzegladarka.FrameLoadEnd -= handler;

Ewentualnie możesz odsubskrybować wszystkie eventy, ale w tym przypadku byłoby to dziwne rozwiązanie.

Niestety w tym przypadku handler nie może być typu var.

Stworzyłem coś na podobną modłę, ale poniższy event niestety nie jest wcale odpalany, nie rozumiem dlaczego:

Kopiuj
EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd = async (sender, args) =>
            {
                //Wait for the Page to finish loading
                if (args.Frame.IsMain)
                {
                    await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
                }
            };
            wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;
Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
1
Kopiuj
EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd;
handlerFrameLoadEnd = async (sender, args) =>
{
   //Wait for the Page to finish loading
   if (args.Frame.IsMain)
      await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
   wbPrzelgadarka.FrameLoadEnd -= handlerFrameLoadEnd;
};
wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;

Generalnie tak mógłbyś to zrobić i powinno działać.

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1683
0
Sarrus napisał(a):
Kopiuj
EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd;
handlerFrameLoadEnd = async (sender, args) =>
{
   //Wait for the Page to finish loading
   if (args.Frame.IsMain)
      await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
   wbPrzelgadarka.FrameLoadEnd -= handlerFrameLoadEnd;
};
wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;

Generalnie tak mógłbyś to zrobić i powinno działać.

Ostatecznie zadziałało, dzięki! Głównym błędem był fakt, że wcześniej deklarowałem EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd w metodzie w której handler jest odpalany, i w nim nie mogłem już odsubskrybować go.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.