0

Windowsフォームに3つのボタンがあります

ここに画像の説明を入力

各ボタンにはTo+T1以外の独自の方法があります。 Toを押すと、時間T0が「0」になるように設定され、追加の設定が行われます。同様に、T1押すと、現在の時刻が取得されて計算されます時刻T1

ボタンT0+T1は、 T0ボタン クリック イベントに続いてT1ボタン クリック イベントを発生させます。


上記のセットアップから、どちらの方法でもT0T1の同じタイミングが得られます(例: T0=0、T1=0.1 秒)。私の質問は、T0 + T1ボタンを押した場合、 T0としてタイミングを達成する方法はありますか? =0 , T1=0 ?

ご提案をいただければ幸いです。お時間をいただきありがとうございます..:)

4

2 に答える 2

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

更新します

2 つのイベントの同時発生について。

最初の質問は、イベントの発生については何もありません。あなたは今そのような種類のコードを持っています:

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

これはorイベントの発火ではありません。このコードは、2 つのメソッドを呼び出すだけです (それらがどこかでイベント ハンドラーとして使用されている場合でも)。イベントが宣言されているオブジェクトの外部でイベントを発生させることはできません。Button0.ClickButton1.Click

2 つ目は、OS の性質上、2 つのメソッドを同時に呼び出すことはできませ。これはリアルタイム OS ではありません。もちろん、スレッドはその命令を順番に実行するため、(あなたの例のように) 単一のスレッドを使用することは不可能ですが、複数のスレッドを使用することは不可能です.2 つのスレッドが同時に開始されるという保証はありません (そのような API はありません)。

于 2013-06-28T10:26:19.953 に答える