このコードでボタンのテキストを変更する最初の試行が機能しないのに、 3 回目の試行は機能するのはなぜですか?
ユーザーは、シリアル ポートが接続されるまで数秒待つ必要があります。その後、私は彼がすでに接続していることを彼に警告したいと思います (2 回目の試行は問題を引き起こす可能性があります)。
彼が「当たり前」と思って 2 回クリックしないように、大丈夫だということを知らせたかったのです。
失敗。テキストの変更は表示されません。
では、ボタン テキストの 3 番目の変更は機能するのに、最初の変更は機能しないのはなぜですか? 2番目が機能するかどうかはわかりません。
/***********************************************************************
* Button: Connect Port *
***********************************************************************/
private void TheConnectPortButton_Click(object sender, EventArgs e)
{
string OldText = TheConnectPortButton.Text;
TheConnectPortButton.Text = "Busy, Please Wait"; /////// This never happens
ButtonBoss.ButtonHandler_ConnectPort();
TheConnectPortButton.Text = OldText; /////// Not sure if this happens
if (aUartSemaphoreThatTells.IfWeHaveConnectedToAPort == (int)aValueWhichIndicatesThat.YesWeHaveAGoodPortConnected)
{
TheConnectPortButton.Text = "Connected"; /////// This one does happen
}
}
これは、他のボタン ルーチン (たとえば、Tx/Rx などの前に接続されていることを確認する) と一緒に、彼が 2 回目に接続しないようにするためaUartSemaphoreThatTells.IfWeHaveConnectedToAPort
にルーチンによっても使用されます。ButtonBoss
ルーチンがこのように戻った後、コードを変更してみました...
if (aUartSemaphoreThatTells.IfWeHaveConnectedToAPort == (int)aValueWhichIndicatesThat.YesWeHaveAGoodPortConnected)
{
TheConnectPortButton.Text = "Connected";
}
else
{
TheConnectPortButton.Text = OldText;
}
...そして、それでも同じ結果が得られます。
私の推測では (これだけです)、スレッド化が何らかの形でこれらすべてに関与しており、シリアル ポート ルーチンがボタン テキスト変更ルーチンに打ち勝っており、現時点では適切にフォローしていません。
質問: 接続がシステムを占有する前に、テキストを変更するにはどうすればよいですか?
(そんなことがあったら)
質問 2: これを実現できない場合は、ボタンを「グレー表示」することについて読んだことがあると思います。または、実際にユーザーの目の前でボタンを非表示にできることをどこかで見たと思います。再度クリックすることはできません。サンプルコードへのリンクは大歓迎です。