How to solve and avoid from getting this exception ?
in form1 i have this button click event code
private async void buttonAnalyze_Click(object sender, EventArgs e)
{
if (_pointsOnImage.Count > 0 && _segmentAnalyzer != null)
{
string outputFilePath = Path.Combine(jsonFilesFolder, "analysis.csv");
var progress = new Progress<int>(frameNumber =>
{
trackBarFrames.Value = frameNumber;
labelFrames.Text = $"Analyzing frame {frameNumber + 1}/{_totalFrames}";
});
await _segmentAnalyzer.GenerateCsvFileAsync(_totalFrames, _videoCapture, outputFilePath, progress);
MessageBox.Show("Analysis complete. CSV file saved.");
}
else
{
if (_pointsOnImage.Count == 0)
{
MessageBox.Show("_pointsOnImage list contains no elements.");
}
if (_segmentAnalyzer == null)
{
MessageBox.Show("Make sure that _segmentAnalyzer is not null.");
}
}
}
and in the class SegmentAnalyzer i have this method code
public async Task GenerateCsvFileAsync(int totalFrames, VideoCapture videoCapture, string outputFilePath, IProgress<int> progress)
{
int squareSize = CalculateSquareSize();
using (StreamWriter writer = new StreamWriter(outputFilePath))
{
await writer.WriteLineAsync("FRAME_NUMBER,MINUS,LEFTDIGIT_TOP,LEFTDIGIT_LEFTTOP,...,RIGHTDIGIT_RIGHTBOTTOM,RIGHTDIGIT_BOTTOM");
for (int frameNumber = 0; frameNumber < totalFrames; frameNumber++)
{
videoCapture.Set(VideoCaptureProperties.PosFrames, frameNumber);
Mat frame = new Mat();
if (videoCapture.Read(frame))
{
Bitmap bitmap = BitmapConverter.ToBitmap(frame);
bmp = bitmap;
string line = $"{frameNumber}";
foreach (var point in _pointsOnImage)
{
Rectangle square = new Rectangle(point.X - squareSize / 2, point.Y - squareSize / 2, squareSize, squareSize);
double grayLevelAverage = CalculateGrayLevelAverage(square);
line += $",{grayLevelAverage}";
}
await writer.WriteLineAsync(line);
}
progress?.Report(frameNumber);
}
}
}
the exception is on the line:
using (StreamWriter writer = new StreamWriter(outputFilePath))
System.IO.IOException: ‘The process cannot access the file ‘d:savedpointsanalysis.csv’ because it is being used by another process.’