Cześć, mam pytanie w jaki sposób można wyczyścić wszystkie zdarzenia które mają się wykonać? Wydaje mi się, że w C# powinno być coś takiego jak kolejka lub stos zdarzeń.
Mój problem dotyczy klikania w aplikacjach WPF WEB-XABP.
Jeśli bardzo szybko kliknę kilka razy przycisk wykonujący pewne zdarzenie to kilka razy z rzędu wykonuje się to samo zdarzenie (ale nie w taki sposób, że klikam przycisk i wykona się zdarzenie, potem znów klikam i znów zdarzenie, ale np. klikam szybko 3x, i potem po kolei leci 3x to samo zdarzenie).
W aplikacji Windowsowej nie ma takiego problemu, bo chyba tam zdarzenia są wykonywane synchroniczne, więc mimo wielokrotnego klikania przyjęte jest tylko pierwsze zdarzenie. Problem jest w aplikacjach WEB. Wydaje mi się, że gdyby po wykonaniu pierwszego zdarzenia wyczyścić kolejkę zdarzeń, wszystko było by ok.
0
1
Zdarzenia są wywoływane natychmiast po wykryciu triggera. Nie wiem jak to dokładnie wygląda w XABP, ale przecież nie zmieniano całego mechanizmu zdarzeń specjalnie dla niego.
Jeśli nie chcesz żeby zdarzenie było kilkakrotnie jednocześnie wywoływane, to napisz:
void metoda_obsługi_zdarzenia()
{
eventHandler -= metoda_obsługi_zdarzenia;
// praca metody
eventHandler += metoda_obsługi_zdarzenia;
}
albo bardziej "pro" (z opóźnieniem) - sample program:
static void Main(string[] args)
{
ev += new EventHandler(Obsługa);
while (true)
{
if (ev != null)
ev(null, null);
}
}
static event EventHandler ev;
static void Suspress(EventHandler d, int delay)
{
ev -= d;
System.Threading.Thread.Sleep(delay);
ev += d;
}
static int ctr;
static void Obsługa(object sender, EventArgs e)
{
Action suspress = () => { Suspress(Obsługa, 1000); };
suspress.BeginInvoke(null, null);
Console.WriteLine("Obsługa {0}!!!\n", ctr++);
}
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.