Picturebox加载图片后在删除该图片时的报错问题的解决方法

当用Picturebox显示图片时是用的

Image.FromFile(ImageRul);这个方法来显示图片的,

如果这时想把图片给删除的话(File.Delete()),会报错,提示该图片正在使用中,

1,方法一,就是将该图片以流的方式加载进来,然后在赋给Picturebox,这样不存在删除的时候报错了。

调用的时候用:

Image.FromStream(ByteToStream(SetImageToByteArray(ImageUrl)));

下面是封装好的方法:

 

2,方法2:Picturebox.Load();    

 

3, 方法3:  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果在切换照片PictureBox 显示的照片容易卡在某一张图片不动,可能是由于加载图片的操作阻塞了 UI 线程导致的。为了解决这个问题,你可以使用异步加载图片的方式来避免阻塞 UI 线程。 你可以使用 `Task.Run()` 方法在后台线程异步加载图片,并在加载完成后将其设置为 PictureBoxImage 属性。这样可以确保 UI 线程不会被阻塞,从而保持界面的流畅性。 以下是修改后的示例代码: ```csharp using System; using System.IO; using System.Threading.Tasks; using System.Windows.Forms; namespace ImageSlideshow { public partial class Form1 : Form { private Timer timer; private int currentIndex; private string[] imagePaths; public Form1() { InitializeComponent(); // 设置计器 timer = new Timer(); timer.Interval = 2000; // 每2秒切换一次图片 timer.Tick += Timer_Tick; } private void Form1_Load(object sender, EventArgs e) { // 获取文件夹的所有图片文件路径 string folderPath = @"C:\Path\To\Your\Folder"; imagePaths = Directory.GetFiles(folderPath, "*.jpg"); if (imagePaths.Length > 0) { // 显示第一张图片 LoadImageAsync(imagePaths[0]); currentIndex = 0; // 开始计器 timer.Start(); } } private async void LoadImageAsync(string imagePath) { // 异步加载图片 pictureBox.Image = await Task.Run(() => Image.FromFile(imagePath)); } private async void Timer_Tick(object sender, EventArgs e) { // 切换到下一张图片 currentIndex = (currentIndex + 1) % imagePaths.Length; await LoadImageAsync(imagePaths[currentIndex]); } } } ``` 通过在 `LoadImageAsync()` 方法使用 `await Task.Run()`,我们在后台线程加载图片,并将其设置为 PictureBoxImage 属性。这样就可以避免阻塞 UI 线程,确保界面的流畅性。 请注意,为了使用异步方法,你需要将 `LoadImageAsync()` 方法的返回类型更改为 `Task`,并将 `Timer_Tick()` 方法的返回类型更改为 `async void`。同,确保在使用异步方法正确处理异常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值