[英]I want to use MemoryStream replace FileStream
我在添加Image
遇到问题,我可以添加一次,如果我添加两次或多次,则添加错误:
该进程无法访问文件'C:\\ Users \\ Administrator \\ AppData \\ Roaming \\ afinos \\ CaptureImage \\ CapImage.Jpg',因为它正在被另一个进程使用。
public static void SaveImageCapture(string imgPath, BitmapSource bitmap)
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.QualityLevel = 100;
using (FileStream fstream = new FileStream(imgPath, FileMode.Create))
{
encoder.Save(fstream);
fstream.Close();
fstream.Dispose();
}
}
//Call to use SaveImageCpture
private void btnCapture_Click(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(new Action(delegate()
{
string path = "afinos\\" + "CaptureImage\\" + "CapImage.Jpg";
if (Directory.Exists(path) == false)
{
Directory.CreateDirectory(path);
}
Capture_Helper.SaveImageCapture(pathapp + "\\" + path, (BitmapSource)PicCapture.Source);
ChangeAvatar_vcard.Source = PicCapture.Source;
txtPath.Text = pathapp + "\\" + path;
}));
}
您可以添加标志以停止并行写入同一文件。
private bool isCaptureInProgress = false;
private void btnCapture_Click(object sender, RoutedEventArgs e)
{
if (isCaptureInProgress)
{
MessageBox.Show("Capture is already in progress. Please wait to finish it first");
return;
}
Dispatcher.Invoke(new Action(delegate()
{
isCaptureInProgress = true;
string path = "afinos\\" + "CaptureImage\\" + "CapImage.Jpg";
if (Directory.Exists(path) == false)
{
Directory.CreateDirectory(path);
}
Capture_Helper.SaveImageCapture(pathapp + "\\" + path, (BitmapSource)PicCapture.Source);
ChangeAvatar_vcard.Source = PicCapture.Source;
txtPath.Text = pathapp + "\\" + path;
isCaptureInProgress = false;
}));
}
您需要注意错误处理,并确保设置reset标志(最好在finally块中)。
您是否尝试过将FileShare
设置为Write
// FileShare.Write Allows subsequent opening of the file for writing. If this flag is not specified,
// any request to open the file for writing (by this process or another process)
// will fail until the file is closed. However, even if this flag is specified,
// additional permissions might still be needed to access the file.
using (FileStream fstream = new FileStream(imgPath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
encoder.Save(fstream);
fstream.Close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.