2011-12-27 6 views
5

Attualmente sto lavorando su un salvaschermo, ma voglio ritardare l'attivazione dello screensaver per un periodo di tempo per garantire che la posizione del mouse sia ancora nella posizione per attivarlo, per prevenire l'attivazione accidentale. Sto pensando ad una sorta di thread per controllare la posizione del mouse per x secondi prima dell'esecuzione, sarebbe una soluzione ragionevole?Ritardare un'azione per un periodo di tempo

non sto scrivendo un salvaschermo, ho scritto un'applicazione in modo che quando si sposta il mouse in un angolo designato del desktop, lo screensaver si accende ... Voglio sapere come aggiungere un ritardo quando si sposta il mouse in quell'angolo di impedire il lancio accidentale del screensaver

Se sì, come?

+0

Esiste un'API per gestire il salvaschermo. Stai parlando di questo? –

+0

Scrivendo la mia applicazione di tipo "Hot Corners" utilizzando ganci mouse a basso livello. Ho tutto ciò che funziona, sto solo cercando un modo per ritardare l'avvio dello screensaver quando il mouse si trova nella "zona di attivazione" – CybrHwk

+2

No, uno screen saver che presta attenzione alla posizione del mouse non ha alcun senso. Non dovrebbe * attivare * quando un essere umano lo sta spostando. Pensaci un po '. –

risposta

4

in modo che quando si sposta il mouse in un angolo designato del desktop, lo screensaver si accende ...

Quando il mouse arriva, impostare un valore booleano e un timer. Fai in modo che qualsiasi azione del mouse cancelli il booleano.
Solo quando il timer scatta e la tua bandiera è ancora lì, procedi.

In altre parole, utilizzare una piccola macchina a stati.

+3

+1 per "non usare un thread per questo" – dthorpe

+0

È andato per questa soluzione, funziona a meraviglia, grazie per il tuo aiuto :) – CybrHwk

0

Ecco codice pseudo

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

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

    }); 

EDIT: Nota questo non parla di invocare ritorna strato gui o bloccaggio del filetto. Vedi l'ispirazione per questa situazione sul mio articolo del blog dal titolo C# MultiThreading Using ThreadPool, Anonymous Delegates and Locks che mostra il corretto blocco.

+0

Un'altra risposta non molto pertinente che ha un link a il tuo blog –