Odsubskrybowanie eventu

Odpowiedz Nowy wątek
2019-04-11 10:25
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ą.

edytowany 1x, ostatnio: bakunet, 2019-04-11 10:53

Pozostało 580 znaków

2019-04-11 10:46
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.

Pozostało 580 znaków

2019-04-11 10:52
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;
edytowany 1x, ostatnio: bakunet, 2019-04-11 10:54

Pozostało 580 znaków

2019-04-11 12:00
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ć.

Pozostało 580 znaków

2019-04-11 12:49
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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