C# 如何在无限时间内使用随机函数生成随机图像?

C# 如何在无限时间内使用随机函数生成随机图像?,c#,image,random,C#,Image,Random,我正在编写一个代码,使用随机像素生成位图图像。我想在显示器上一个接一个地播放随机生成的图像,就像电影剪辑一样。 我基本上需要一个循环,它每次运行我的函数并生成一个新图像,然后将其显示到我的图像框中,并重复这个过程无限时间 While (true) { foreach (Point p in blackPixels) { if (r.NextDouble() < 0.20) { bmp.SetPixel(p.X, p.Y,

我正在编写一个代码,使用随机像素生成位图图像。我想在显示器上一个接一个地播放随机生成的图像,就像电影剪辑一样。
我基本上需要一个循环,它每次运行我的函数并生成一个新图像,然后将其显示到我的图像框中,并重复这个过程无限时间

While (true)
{
    foreach (Point p in blackPixels)
    {
       if (r.NextDouble() < 0.20)
       {
           bmp.SetPixel(p.X, p.Y, Color.Black);
       }
       else
       {
           bmp.SetPixel(p.X, p.Y, Color.White);
       }
    }

    pictureBox1.Image = bmp;
}
While(true)
{
foreach(点p,黑色像素)
{
if(r.NextDouble()<0.20)
{
bmp.SetPixel(p.X,p.Y,Color.Black);
}
其他的
{
bmp.SetPixel(p.X,p.Y,Color.White);
}
}
pictureBox1.Image=bmp;
}
我的问题是我已经把整个代码放到了“While(true)”中,但它使程序崩溃了!

有谁能告诉我如何正确使用代码,使其在每一帧都能正常工作,并且可以连续显示每一帧?

您可以尝试以下方法:

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 16);
timer.Tick += delegate
{
    timer.Stop();
    // your foreach code here
    foreach (Point p in blackPixels)
        ...
    timer.Start();
};
timer.Start();
它应该每16秒更新一次图片,而不会阻塞GUI线程


为了准确起见,请确保使用
timer停止计时器。在关闭表单之前停止

您所说的“程序崩溃”是什么意思?是否有任何异常导致应用程序终止?如果它只是冻结并且不允许任何输入,请检查您的代码,并告诉我们您希望在循环运行时在循环的哪个部分处理任何输入。是的,基本上它没有显示任何内容,只是停止了工作所以-当您的
while(true)
循环运行时,在哪里(在哪一行中))您希望应用程序处理任何用户输入吗?@user3266873代码以16秒的间隔执行,直到计时器停止。如果只想执行
n次
,可以在代理中添加一个计数器并增加它。当超过限制时,您不会再次启动计时器。谢谢您的评论;你能解释一下(0,0,16)值是什么吗?我怎样才能连续播放这些帧(没有延迟)?@user3266873这些分别是
TimeSpan
的小时、分钟和秒。看,它给了我“调度员”的参考错误!我应该在我的项目中添加任何库吗?我假设您使用WPF。可能需要使用System.Windows.Threading添加
使用
调度程序