2011-12-27 16 views
5

Aktualnie pracuję nad wyrzutnią wygaszacza ekranu, ale chcę opóźnić aktywację wygaszacza ekranu na pewien czas, aby upewnić się, że pozycja myszki jest nadal w stanie go aktywować, aby zapobiec przypadkowej aktywacji. Zastanawiam się, jaki rodzaj wątku sprawdzałby pozycję myszy przez x s przed wykonaniem, czy byłoby to rozsądne rozwiązanie?Opóźnianie akcji przez pewien okres czasu

Nie piszę wygaszacz ekranu, napisałem aplikację tak, że kiedy kursor do wskazanego rogu pulpitu, wygaszacz ekranu przychodzi na ... Chcę wiedzieć, jak dodawać opóźnienie kiedy najechaniu myszką na tym rogu, aby zapobiec przypadkowemu uruchomienie wygaszacza ekranu

Jeśli tak to jak?

+0

Istnieje interfejs API do zarządzania wygaszaczem. Mówisz o tym? –

+0

Pisanie własnych aplikacji typu "Gorące rogi" za pomocą hooków na niskim poziomie. Mam wszystko, co działa, tylko szukam sposobu na opóźnienie uruchomienia wygaszacza ekranu, gdy mysz znajdzie się w "strefie aktywacji". – CybrHwk

+2

Nie, wygaszacz ekranu, który zwraca uwagę na pozycję myszy, nie ma żadnego sensu. Nie powinno się * aktywować * kiedy człowiek porusza nim. Pomyśl o tym przez chwilę. –

Odpowiedz

4

tak, że kiedy kursor do wskazanego rogu pulpitu, wygaszacz ekranu włącza się ...

Kiedy mysz dostaje tam ustawić wartość logiczną i timer. Wykonaj dowolną akcję myszy, usuwając wartość logiczną.
Tylko po uruchomieniu timera i pozostawieniu flagi, kontynuuj.

Innymi słowy, używaj małego automatu stanów.

+3

+1 dla "nie używaj w tym celu nici" – dthorpe

+0

Poszedłem po to rozwiązanie, działa gratka, dziękuję za pomoc :) – CybrHwk

0

Oto pseudokod

var CurrentMouse = ...; // Get mouse coordinates. 
    ThreadPool.QueueUserWorkItem(  
    (s) => { 
      Thread.Sleep(500); // Half a second 

     // if (Mouse did not move) 
     //  Launch Screen Saver 

    }); 

EDIT: Uwaga ta nie przemawia do wywoływania powrotem do gui warstwy lub blokowania gwintu. Zobacz inspirację dla tej sytuacji na moim blogu o artykule C# MultiThreading Using ThreadPool, Anonymous Delegates and Locks, który pokazuje prawidłowe blokowanie.

+0

Kolejna nie bardzo trafna odpowiedź, która ma link do Twój blog. –