创建照片后,界面上显示照片,显示第一张照片,但创建新照片后,出现错误:
该进程无法访问文件“...tmp\Photo.jpeg”,因为该文件正在被另一个进程使用。
System.IO.IOException:进程无法访问文件“...tmp\Photo.jpeg”,因为它正在被另一个进程使用。在 System.IO.FileSystem.DeleteFile(字符串 fullPath) 在 System.IO.File.Delete(字符串路径) 在 PhotoMerge.ViewModel.MainViewModel.CreatePhoto(Int32 通道,相机相机) ...\ViewModel\MainViewModel.cs
模型:
public class Camera : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _address;
private string _login;
private string _password;
private string _name;
private string _path;
private Uri? _imagePath;
public string Address { get { return _address; } }
public string Login { get { return _login; } }
public string Password { get { return _password; } }
public string Name { get { return _name; } }
public string Path { get { return _path; } }
public Uri? ImagePath
{
get { return _imagePath; }
set
{
_imagePath = value;
OnPropertyChanged("ImagePath");
}
}
public Camera(string address, string login, string password, string name, string path)
{
_address = address;
_login = login;
_password = password;
_name = name;
_path = path;
}
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
视图模型:
internal class MainViewModel : INotifyPropertyChanged
{
private Camera camera;
private ICommand createPhoto;
public Camera Camera
{
get { return this.camera; }
}
public ICommand CreatePhoto
{
get { return this.createPhoto; }
}
public MainViewModel()
{
camera = new Camera("192.168.3.103", "admin", "1", "Photo", @"C:\tmp\");
createPhoto = new DelegateCommand(parameter => CreateTestPhoto(1, camera));
}
private void CreateTestPhoto(int channel, Camera camera)
{
if (File.Exists(camera.Path + camera.Name + ".jpeg"))
File.Delete(camera.Path + camera.Name + ".jpeg");
if (HiWatch.Create(channel, camera.Login, camera.Password, camera.Path, camera.Name, 550))
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri(camera.Path + camera.Name + ".jpeg", UriKind.Absolute);
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bitmap.EndInit();
camera.ImagePath = bitmap.UriSource;
}
}
}
XAML:
<Image Source="{Binding Camera.ImagePath}" DockPanel.Dock="Top" Margin="0" Width="Auto" Height="Auto" Stretch="Uniform" MinWidth="364" MinHeight="205" />
如何在UI中正确实现照片更新?
我是这样解决的:
模型:
视图模型:
XAML: