2013-06-28 3 views
0

У меня есть три кнопки на мое окне формеКак стрелять два события одновременно в C#

enter image description here

и каждая кнопка имеет свой собственный метод кроме К + Т1, когда я попал на для, это настроим время T0 в «0», а также некоторые дополнительные настройки, так же, когда я ударил по T1 он получает текущее время и вычисляет время T1.

Кнопка T0 + T1 будет срабатывать T0 события нажатия кнопки с последующим T1 щелчка кнопки события.


из приведенных выше настроек, так или иначе я получаю те же моменты времени для T0 & T1 (например: Т0 = 0, T1 = 0,1 сек), теперь мой вопрос, если я ударил T0 + T1 кнопка есть ли способ достижения таймингов как T0 = 0, T1 = 0?

любые предложения будут высоко ценится & Спасибо за ваше время .. :)

ответ

4

Похоже, вам просто нужно, чтобы обеспечить некоторую базовую величину для расчета:

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); 
} 

Update.

Об одновременном запуске двух событий.

Во-первых, вы сомневаетесь в том, что у вас нет событий. У вас есть такой вид кода сейчас:

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

Это неButton0.Click или Button1.Click событие стрельбы. Этот код просто вызывает два метода (даже если они используются как обработчики событий где-то). Вы не можете запустить событие вне объекта, где это событие объявлено.

Во-вторых, вы не можете назвать любые два метода в точноже времени из-за ОС природы, это просто не ОС реального времени. Конечно, это невозможно с использованием одного потока (как в вашем примере), потому что поток выполняет свои инструкции последовательно, но с использованием нескольких потоков это невозможно - нет никакой гарантии, что два потока начнутся одновременно (и такого API нет).

+0

Благодарим за быстрое решение. Кажется, это похоже на wok, но мне было бы интересно узнать, есть ли способ запустить два события одновременно (только для обучения). – SanVEE

+1

Событие обжига не сильно отличается от методов вызова. Больше всего это синхронно. Таким образом, вы не можете одновременно запускать два события так же, как вы не можете одновременно вызвать два метода. Конечно, у вас могло бы быть два потока для этого, но это было бы походить на вождение гвоздя с крутящим мячом. –

+1

Я обновил ответ, чтобы разъяснить путаницу «в то же время». – Dennis

5

В Form.Designer.cs вы можете добавить еще один System.Eventhandler.

Например, вы можете изменить следующие:

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

к этому:

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

Однако приведенный выше код будет вызывать события после того, как друг друга, но не в то же самое время.

+2

Я бы добавил этот код в конструкторе 'Form.cs', а не в' Form .Designer.cs' 'метод InitializeComponent()'. Причина в том, что, как только вы используете конструктор для изменения формы, ваш код будет автоматически удален. Само собой разумеется, вам придется называть 'InitializeComponent()' перед установкой 'EventHandler' s – Nolonar

+0

Спасибо за решение, это хорошо для простых решений, так как мне нужно, чтобы тайминги были точными и заметили, что я все еще вижу некоторую задержку через T0_Click & T1_Click методы – SanVEE

+0

@Nolonar Я написал это в спешке. Извиняюсь. – Robin