2017-03-15 1 views
0

J'ai une application de bureau de Windows qui à l'ouverture d'une forme de fenêtre modale crée un dossier en arrière-plan et écrit l'heure de création dedans. Je dois mettre à jour ce fichier toutes les 5 secondes et comparer avec l'heure de création afin que la fenêtre modale soit automatiquement fermée après 60 minutes et que le fichier soit supprimé. La création/suppression de fichiers et le suivi du temps doivent se faire en arrière-plan afin que l'utilisateur ne soit pas affecté par ce problème lorsque vous travaillez sur ce modal.Mettre à jour le fichier avec du texte chaque seconde qu'un modal de Windows est ouvert

Cela peut-il être réalisé dans une application de bureau Windows?

+3

Pourquoi un fichier? pourquoi ne pas utiliser une minuterie? –

+0

pourquoi devrait le faire –

+0

Oui, il le peut. Avez-vous déjà essayé quelque chose? parce que cela ressemble à une question «écrivez le code pour moi». – Alex

Répondre

1

Il n'est pas nécessaire de créer un fichier et de le mettre à jour et de le vérifier périodiquement. Vous pouvez y parvenir beaucoup plus facile avec minuterie:

var modalForm = new ModalForm(); 
var timer = new System.Timers.Timer(new TimeSpan(1, 0, 0).TotalMilliseconds); 
timer.Elapsed += (s, ea) => { modalForm.Invoke(new MethodInvoker(modalForm.Close)); }; 
modalForm.Shown += (s, ea) => { timer.Start(); }; 
modalForm.FormClosed += (s, ea) => { timer.Stop(); }; 
modalForm.ShowDialog(); 

S'il vous plaît noter que gestionnaire Timer.Elapsed est exécuté dans un thread séparé si vous avez besoin d'employer Control.Invoke lorsque vous appelez la méthode Close du formulaire modal. Sinon, vous pouvez définir timer.SynchronizingObject-modalForm:

var modalForm = new ModalForm(); 
var timer = new System.Timers.Timer(new TimeSpan(1, 0, 0).TotalMilliseconds); 
timer.SynchronizingObject = modalForm; 
timer.Elapsed += (s, ea) => { modalForm.Close(); }; 
modalForm.Shown += (s, ea) => { timer.Start(); }; 
modalForm.FormClosed += (s, ea) => { timer.Stop(); }; 
modalForm.ShowDialog(); 
0

Simplement, vous pouvez essayer une méthode comme

suivante
private void Form1_Load(object sender, EventArgs e) 
    { 
     Timer MyTimer = new Timer(); 
     MyTimer.Interval = (60 * 60 * 1000); // 60 mins 
     MyTimer.Tick += new EventHandler(MyTimer_Tick); 
     MyTimer.Start(); 
    } 

    private void MyTimer_Tick(object sender, EventArgs e) 
    { 
     MessageBox.Show("The form will now be closed.", "Time Elapsed"); 
     this.Close(); 
    }