C# Picturebox出现问题并尝试更新图像

C# Picturebox出现问题并尝试更新图像,c#,visual-studio-2019,picturebox,C#,Visual Studio 2019,Picturebox,我试图用定时器更新图片框中的图像。老实说,我对pictureboxes没有太多经验,一般来说,我已经5年没有做过任何C#工作了。我试着在谷歌和这里搜索,但似乎找不到我认为是我需要的答案:/ 从本质上说,这就是我试图做的。表单以秒为单位表示时间(例如,5秒), 当一个按钮被点击时,一个新的表单被打开。这个新表单上有一个图片框,可以显示目录中的随机照片。我可以让图片框显示随机照片,但当我试图让它刷新而不重新打开表单时,这就是我遇到的问题 我有一个变量(timeVar)设置为以秒为单位的输入时间,在后

我试图用定时器更新图片框中的图像。老实说,我对pictureboxes没有太多经验,一般来说,我已经5年没有做过任何C#工作了。我试着在谷歌和这里搜索,但似乎找不到我认为是我需要的答案:/

从本质上说,这就是我试图做的。表单以秒为单位表示时间(例如,5秒), 当一个按钮被点击时,一个新的表单被打开。这个新表单上有一个图片框,可以显示目录中的随机照片。我可以让图片框显示随机照片,但当我试图让它刷新而不重新打开表单时,这就是我遇到的问题

我有一个变量(timeVar)设置为以秒为单位的输入时间,在后台有一个计时器,每当计时器滴答作响时,它就会通过减去1来更新timerVar。这就是我必须为每次迭代在图片框中设置图片的内容。有一个outerloop在我的列表(dirList)中循环,直到它命中列表中的每一项

    while(timerVar > 0)
{
     pictureTimer.Start();
     imagePathPic = imagePath + dirList[ind];
     sessionPicture.ImageLocation = @imagePathPic;
     sessionPicture.Refresh();
}
    pictureTimer.Stop();
    timeVar = 5;
dirList是给定目录中所有图像的列表,imagePath是保存目录的字符串。我的列表/字符串的功能以及外部循环都已成功测试,但当我在上面的循环中应用picturebox时,它在获得最后一张图片并显示之前不会执行任何操作。要让它在表单上显示每张图片,我缺少什么?如果你需要更多的信息,请告诉我


谢谢大家!

对我来说,从文件加载图像是有效的
Image.FromFile()
位于
System.Drawing
命名空间下。我不必添加任何
Refresh()
方法。您可以尝试在用户窗体上调用Refresh
this.Refresh()
,或者只需调用
Refresh()

这是模型:


拆下回路。您需要使用
Timer.Tick
事件来更改映像(
Tick
事件属于
System.Windows.Forms.Timer
组件);pictureBox1.Image=Image.FromFile(imagePath)我像上面的例子一样修改了我的代码,除了没有用按钮启用计时器外,我在表单加载方法中启用它,因为我需要它在表单加载时启动。表单运行,但没有图片加载。pictureTimer.Tick+=new EventHandler(pictureTimer\u Tick);pictureTimer.Interval=5000_images=Directory.GetFiles(_imagesFolder);pictureTimer.Enabled=true;您好@user2921015,我将启用计时器移动到
Form1\u Load()
方法,它正在工作。当您将断点放在
pictureTimer_Tick()
上时,计时器是否在滴答作响?
\u图像
数组是否包含任何元素?
pictureBox1.Visible
是否设置为true?无需担心。我只是将相同的图像加载到图像对象中,然后将picturebox的大小调整为该图像的宽度/高度。再次感谢!
public partial class Form1 : Form
{
    Timer _timer = new Timer();
    string[] _images;
    Random _random = new Random();
    string _imagesFolder = @"C:\Users\Me\Desktop\Picures\";
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _timer.Tick += new EventHandler(timer_Tick);
        _timer.Interval = 2000;
        _images = Directory.GetFiles(_imagesFolder);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        _timer.Enabled = !_timer.Enabled;
    }

    private void timer_Tick(object sender, EventArgs e)
    {
        var index = _random.Next(0, _images.Length);
        var imagePath = Path.Combine(_imagesFolder, _images[index]);
        pictureBox1.Image = Image.FromFile(imagePath);
    }
}