C# 如何摆脱c语言中的无限循环#
所以我有一份两张表格的申请表。您在当天的报价中输入的第一个表单,然后按一个按钮打开第二个表单,其中的文本显示在标签中。然后按下一个按钮,文本会以无限循环在屏幕上连续滚动。它显然挂起了程序。我希望能够有文本坐在那里滚动,直到有人想停止它与按钮点击或什么。。。我很确定你必须用线程来做,我只是个新手,对线程不太了解。。。 这是我的无限循环,我点击按钮调用C# 如何摆脱c语言中的无限循环#,c#,winforms,infinite-loop,C#,Winforms,Infinite Loop,所以我有一份两张表格的申请表。您在当天的报价中输入的第一个表单,然后按一个按钮打开第二个表单,其中的文本显示在标签中。然后按下一个按钮,文本会以无限循环在屏幕上连续滚动。它显然挂起了程序。我希望能够有文本坐在那里滚动,直到有人想停止它与按钮点击或什么。。。我很确定你必须用线程来做,我只是个新手,对线程不太了解。。。 这是我的无限循环,我点击按钮调用 private void StartScroll() { System.Text.StringBuilder sb = ne
private void StartScroll()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(label2.Text + " ");
while (true)
{
char ch = sb[0];
sb.Remove(0, 1);
sb.Insert( sb.Length , ch);
label2.Text = sb.ToString();
label2.Refresh();
System.Threading.Thread.Sleep(100);
}
}
感谢您的帮助 看看这个网站的后台工作人员。它很容易实现,应该能够解决您的问题
只需创建一个每100毫秒计时一次的计时器。例如:
//Create a new timer that ticks every 100ms
var t = new System.Timers.Timer (100);
//When a tick is elapsed
t.Elapsed+=(object sender, System.Timers.ElapsedEventArgs e) =>
{
//what ever you want to do
};
//Start the timer
t.Start();
如果您需要在表单中搜索文本(如果我理解正确),您可以尝试此方法。TextSize是文本的大小,x代表表单的x轴,您可以根据需要更改此值
System.Text.StringBuilder sb;
private int x,TextSize;
public Form1()
{
InitializeComponent();
sb = new System.Text.StringBuilder(label2.Text + " ");
x = this.ClientRectangle.Width;
TextSize = 16;
}
private void Button1_Click(object sender, EventArgs e)
{
timer1.Tag = sb.ToString();
timer1.Enabled = true;
}
void timer1_Tick(object sender, EventArgs e)
{
Form1_Paint(this,null);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
string str = timer1.Tag.ToString();
Graphics g = Graphics.FromHwnd(this.Handle);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.FillRectangle(Brushes.Black, this.ClientRectangle);
g.DrawString(str, new Font("Arial", TextSize), new SolidBrush(Color.White), x, 5);
x -= 5;
if (x <= str.Length * TextSize * -1)
x = this.ClientRectangle.Width;
}
考虑到你对这件事有多陌生。。您是否考虑过使用
System.Windows.Forms.Timer
控件?这可能比直接钻研线程更容易。查看后台工作程序类而不是while(true)
,在表单上放置一个计时器,并将Interval
属性设置为100。确保在StartScroll()中启动
计时器,并处理勾选
事件,您将在该事件中放置滚动逻辑。我从未听说过计时器。。。我将研究它和后台工作人员类。有人介意用计时器演示一下吗?我正在阅读,我真的不明白在哪里放置itATimer
更方便。在这种情况下,Tick
在UI线程中执行,而不是在单独的线程中执行。
private void Button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}