显示消息框对象中的加载点

时间:2014-06-06 16:44:42

标签: c# winforms

我的Windows窗体应用程序中有一个永久消息框。不要与弹出消息框混淆。我的框显示基于应用程序中推送的各种按钮的文本,以更新用户发生的事情。我成功地使用下面的代码在框中显示文本。

messageBox.Text += "I stick message in here" + Environment.NewLine;

我有兴趣在框中显示一些闪烁的点,表示有些事情要发生。例如。 “找东西......”

我在下面找到了Console.Write的代码 如何在我的消息框中完成此工作

for (int dots = 0; dots <= 3; ++dots)
   {
      Console.Write("\rStuff will come{0}", new string('.', dots));
      System.Threading.Thread.Sleep(500); // half a sec
   }

1 个答案:

答案 0 :(得分:0)

我使用Tasks解决了类似的问题。一个任务用于执行后台工作,另一个用于更新消息文本。以下是一些示例代码:

private void button1_Click(object sender, EventArgs e)
{
    // call the helper to do something
    Task.Factory.StartNew(() => { FakeSearch(); });
    //Generate the update the waiting text
    Task.Factory.StartNew(() => { updateWaiting(); });
}

private void FakeSearch()
{
    _externalFlag = false;
    Thread.Sleep(5000);
    _externalFlag = true; // simulate completing the task
}

private bool _externalFlag = false;
private void updateWaiting()
{
    int count = 0;
    StringBuilder waitingText = new StringBuilder();

    waitingText.Append("Finding stuff");
    int baseLen = waitingText.Length;

    while (!_externalFlag)
    {
        Thread.Sleep(1000); // time between adding dots
        if (count >= 3) // number of dots
        {
            waitingText.Remove(baseLen, count);
            count = 0;
        }
        waitingText.Append(".");
        count++;

        BeginInvoke(new Action( () => { updateText(waitingText.ToString()); }) );
    }
    BeginInvoke(new Action( () => { updateText("done"); }) );
}

private void updateText(string txt)
{
    textBox1.Text = txt;
}