我试图让这两个图片框的大小增加,然后使用两种不同的方法/ while循环同时减小尺寸。我怎样才能做到这一点?它的工作原理是,当点击按钮时,两个图片框的大小会增加,直到达到给定的大小,然后它们的大小都会减小。
private void bthGraph_Click(object sender, EventArgs e)
{
red();
blue();
}
private void btnReset_Click(object sender, EventArgs e)
{
pbxBlue.Width = 10;
pbxRed.Width = 10;
}
public void red()
{
int width = 10;
while (width < 156)
{
width++;
pbxRed.Width = width;
pbxRed.Refresh();
Thread.Sleep(10);
}
while (width > 10)
{
width--;
pbxRed.Width = width;
pbxRed.Refresh();
Thread.Sleep(10);
}
}
private void blue()
{
while (pbxBlue.Width < 156)
{
pbxBlue.Width++;
pbxBlue.Refresh();
Thread.Sleep(10);
}
while (pbxBlue.Width > 10)
{
pbxBlue.Width--;
pbxBlue.Refresh();
Thread.Sleep(10);
}
}
}
答案 0 :(得分:2)
试试这种方式
private void bthGraph_Click(object sender, EventArgs e)
{
Task[] tasks = new Task[]
{
new Task(red),
new Task(blue),
};
foreach(var task in tasks)
task.Start();
new Task(red).Start();
new Task(blue).Start();
}
答案 1 :(得分:0)
每个控件只能由创建它的线程更新,表示您无法同时从两个线程*访问UI,因此您无法以这种方式实现您尝试执行的操作。如果您不想制作动画,为什么还需要两种方法?
你应该(正如评论中已经提到的那样)摆脱&#34; Thread.Sleep&#34;在UI线程中,最好使用Timer。
*通过将Property CheckForIllegalCrossThreadCalls设置为false,有一种非常脏的方法。但绝不应该这样做,因为它会导致意外和无法追踪的错误。