2013-06-28 4 views
0

J'ai trois boutons sur mon formulaire WindowsComment tirer deux événements en même temps en C#

enter image description here

et chaque bouton possède son propre méthode, sauf Pour + T1, quand je frappe sur pour, il configurera le temps T0 être « 0 » avec une configuration supplémentaire, de même quand je frappe sur T1 il obtient l'heure actuelle et calcule le temps T1.

Bouton T0 + T1 se déclenche T0 événement click bouton suivi T1 bouton événement click.

de la configuration ci-dessus

, de toute façon j'obtenir les mêmes timings pour T0 & T1 (ex: T0 = 0, T1 = 0.1sec), Ma question est, si je frappe T0 + T1 est-il possible d'atteindre le minutage T0 = 0, T1 = 0?

suggestions seraient appréciés & Merci pour votre temps .. :)

Répondre

4

On dirait que vous avez juste besoin de fournir une valeur de base pour le calcul:

void CalculateT0(DateTime calculationBase) {...} 
void CalculateT1(DateTime calculationBase) {...} 

void T0_ButtonClick(...) 
{ 
    CalculateT0(DateTime.Now); 
} 

void T1_ButtonClick(...) 
{ 
    CalculateT1(DateTime.Now); 
} 

void T0Plus1_ButtonClick(...) 
{ 
    var calculationBase = DateTime.Now; 
    CalculateT0(calculationBase); 
    CalculateT1(calculationBase); 
} 

Mise à jour.

À propos du déclenchement de deux événements en même temps.

Le premier, votre question n'a rien sur les événements de tir. Vous avez ce genre de code maintenant:

void T0Plus1_ButtonClick(...) 
{ 
    T0_ButtonClick(...); 
    T1_ButtonClick(...); 
} 

C'est pas un tir d'événement Button0.Click ou Button1.Click. Ce code appelle simplement deux méthodes (même si elles sont utilisées comme gestionnaires d'événements quelque part). Vous ne pouvez pas déclencher un événement en dehors de l'objet, où cet événement a été déclaré.

La seconde, vous ne pouvez pas appeler les deux méthodes à exactement le même temps en raison de la nature OS, il est tout simplement pas un système d'exploitation en temps réel. Bien sûr, ceci est impossible avec un seul thread (comme dans votre exemple), car le thread exécute ses instructions séquentiellement, mais en utilisant plusieurs threads, il est impossible de garantir que deux threads démarrent simultanément (et il n'y a pas d'API).

+0

Merci pour la solution rapide, celle-ci semble wok mais je serais plus intéressé de savoir s'il y a un moyen de tirer deux événements en même temps (juste pour apprendre) – SanVEE

+1

Le tir d'événement n'est pas très différent des méthodes d'appel. Surtout, c'est synchrone. Vous ne pouvez donc pas déclencher deux événements en même temps de la même manière que vous ne pouvez pas appeler deux méthodes en même temps. Bien sûr, vous pourriez avoir deux fils pour cela, mais ce serait vraiment comme conduire un clou avec un boulet de démolition. –

+1

J'ai mis à jour la réponse pour clarifier la confusion "en même temps". – Dennis

5

Dans Form.Designer.cs, vous pouvez ajouter un autre System.Eventhandler.

Par exemple, vous pouvez modifier les éléments suivants:

this.ToT1.Click += new System.EventHandler(this.ToT1_Click); 

à ceci:

this.ToT1.Click += new System.EventHandler(this.To_Click); 
this.ToT1.Click += new System.EventHandler(this.T1_Click); 

Cependant, le code ci-dessus déclenche les événements après eachother, mais pas en même temps.

+2

Je ajouterais ce code dans le constructeur du fichier 'Form.cs', plutôt que dans le' Form La méthode 'InitializeComponent()' du fichier .Designer.cs'. La raison étant: dès que vous utilisez le concepteur pour modifier votre formulaire, votre code sera automatiquement supprimé. Inutile de dire, vous devrez appeler 'InitializeComponent()' avant de définir le 'EventHandler's – Nolonar

+0

Merci pour la solution, c'est bon pour des solutions simples, car je demande les timings pour préciser et remarqué que je vois encore un peu de retard beween T0_Click & T1_Click méthodes – SanVEE

+0

@Nolonar Je l'ai écrit à la hâte. Excuses. – Robin

Questions connexes