我的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
}
答案 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;
}