PictureBox可见属性不起作用...请帮助

问题描述 投票:6回答:3

我正在使用窗口应用程序和C#..我有一张在应用程序开始时看不见的图片..当点击某个按钮时,必须显示图片框..

我使用这种编码,但图片框不可见

private void save_click(object sender, EventArgs e)

{

      pictureBox1.Visible = true;
      pictureBox1.Show();

      //does the work here 
      //storing and retreiving values from datadase

     pictureBox1.Visible = false;
     pictureBox1.Hide();
}

P.S ...在图片框中我显示了一个gif ..因此用户将知道某些工作正在后台进行..该功能需要很长时间才能完成...

c# picturebox
3个回答
5
投票

假设保存到数据库需要一些时间,您应该使用BackgroundWorker异步执行,一旦操作完成就隐藏PictureBox。

当前未显示图像的原因是因为在长时间运行的保存操作发生时,Windows消息未被处理,因此您的表单将无法响应用户输入而不执行重新绘制。保存操作完成后,消息开始再次处理,图片框已再次隐藏。


3
投票

为了避免使用多线程,你可以做的就是在pictureBox1.Refresh();之后的pictureBox1.Visible = true;,如下所示:

private void save_click(object sender, EventArgs e)
{
    pictureBox1.Visible = true;
    pictureBox1.Refresh();

    //does the work here 
    //storing and retreiving values from datadase

        pictureBox1.Visible = false;
}

1
投票

您的图片框将不会显示,因为您希望在显示图片框期间在UI线程上运行其他操作。在UI线程变为空闲之前(即在您的方法之后),UI不会被重新绘制(显示图片框)。

要解决这个问题,你需要首先显示图片框,然后触发一个线程来运行你的操作(这将允许WinForms愉快地继续交互和绘制UI),然后完成回调到UI线程隐藏图片框。

有关此多线程执行过程的帮助,请参阅此StackOverflow Question

© www.soinside.com 2019 - 2024. All rights reserved.