Odsubskrybowanie eventu

0

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

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ą.

0

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

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.

0
Fuffu napisał(a):

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

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:

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;
1
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ć.

0
Sarrus napisał(a):
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1