【发布时间】:2014-03-08 19:13:46
【问题描述】:
我有一个按“步骤”更新的游戏网格(康威的人生游戏,尽管这与我的问题无关)。我正在尝试创建一个自动运行模拟的播放按钮,直到再次按下该按钮以暂停模拟。起初我有这样的事情:
public partial class MainWindow : Window
{
bool running = true;
public MainWindow()
{
InitializeComponent();
bool isProgramRunning = true;
while(isProgramRunning)
{
while(running)
ProcessGeneration();
}
}
}
我播放/暂停模拟的按钮具有以下点击处理程序:
private void PlayClick_Handler(object sender, RoutedEventArgs e)
{
PlayButton.Content = ((string)PlayButton.Content == "Play") ? "Pause" : "Play";
running = (running) ? false : true;
}
我认为这会让我的程序简单地保持循环(isProgramRunning 永远不会结束)反复检查“正在运行”是真还是假,并且按下按钮切换“正在运行”将允许我循环/跳出环形。但是只是 while(isProgramRunning) 部分会杀死程序(它甚至不会加载)。实际上,每次我尝试使用 while() 时,程序都会停止响应。有没有办法解决这个问题?
【问题讨论】:
-
一句忠告:通过实施 Gosper 的生命算法,你可以很多学习函数式编程;它允许您支持非常大的电路板和非常快速的计算——具有数万亿个单元和每秒数万亿代的电路板——所有这些都使用完全普通的硬件。
-
您可以在 UI 线程上运行 background asynchronous operation,以避免阻塞 WPF Dispatcher 循环。
标签: c# wpf loops while-loop