0

コンソール アプリケーションを実行しています。フォームにテキストボックスがあります。別のクラスで過去 5 分間に読み取られたメッセージの数を計算し、その値をテキスト ボックスに表示する必要があります。コードを実行すると、textbox.text の値が正しく表示されます。しかし、UI では、値がテキスト ボックスに表示されていることがわかりません。ただし、実行時にテキストボックスを手動で編集できます。

これが私のコードです:

コードビハインドで

for (int i = 1; i <= numberOfMsgs; i++)
{
    if (addDateTime.AddMinutes(2).Minute==DateTime.Now.Minute)
    {
        //FilesProcessedInFiveMinutes();
        //Thread thread1 = new Thread(new ThreadStart(FiveMinutesMessage));
        //thread1.Start();
        WebSphereUI webSphereUi = new WebSphereUI();
        webSphereUi.count(fiveMinutesCount);
        addDateTime = DateTime.Now;
    }
    fiveMinutesCount = fiveMinutesCount + 1;
}

form.cs 内

public void count(int countValue)
{
    Thread.Sleep(2000);
    txtLastFiveMins.Focus();
    txtLastFiveMins.Text = countValue.ToString();
    txtLastFiveMins.Refresh();
    txtLastFiveMins.Show();
    backgroundWorker1.RunWorkerAsync(2000);
}
4

1 に答える 1

0

if ステートメントを入力するたびに、新しいフォームを作成しているように見えます。この行は新しいWebSphereUIフォームを作成しています:

    WebSphereUI webSphereUi = new WebSphereUI();

次に、そのcountメソッドを呼び出します。

    webSphereUi.count(fiveMinutesCount);

しかし、このフォームを表示せずに続行します。追加する場合:

    webSphereUi.Show();

次に、フォームが画面に表示され、期待どおりの値が表示されることがあります。ただし、これは if ステートメントが実行されるたびに新しいフォームを表示します。他の場所で宣言し、ループで使用することで、同じフォームを再利用できます。

class yourClass
{

    WebSphereUI webSphereUi = new WebSphereUI();

    ...

    private void yourFunction()
    {
        for (int i = 1; i <= numberOfMsgs; i++)
        {
            if (addDateTime.AddMinutes(2).Minute==DateTime.Now.Minute)
            {
                webSphereUi.count(fiveMinutesCount);
                webSphereUi.Show();
                addDateTime = DateTime.Now;
            }
            fiveMinutesCount = fiveMinutesCount + 1;
        }
    }

}
于 2013-04-03T13:33:23.520 に答える