Вот фрагмент кода:
private static Image Render(IPeakProvider peakProvider, WaveFormRendererSettings settings)
{
if (settings.DecibelScale)
peakProvider = new DecibelPeakProvider(peakProvider, 48);
var b = new Bitmap(settings.Width, settings.TopHeight + settings.BottomHeight);
if (settings.BackgroundColor == Color.Transparent)
{
b.MakeTransparent();
}
using (var g = Graphics.FromImage(b))
{
g.FillRectangle(settings.BackgroundBrush, 0,0,b.Width,b.Height);
var midPoint = settings.TopHeight;
int x = 0;
var currentPeak = peakProvider.GetNextPeak();
while (x < settings.Width)
{
var nextPeak = peakProvider.GetNextPeak();
for (int n = 0; n < settings.PixelsPerPeak; n++)
{
var lineHeight = settings.TopHeight * currentPeak.Max;
g.DrawLine(settings.TopPeakPen, x, midPoint, x, midPoint - lineHeight);
lineHeight = settings.BottomHeight * currentPeak.Min;
g.DrawLine(settings.BottomPeakPen, x, midPoint, x, midPoint - lineHeight);
x++;
}
....
После того, как я начал вызывать функцию Render асинхронно, через
...
var image = await Task.Run(() =>
{
return waveFormRenderer.Render(filePath, peakProvider, settings);
});
...
программа падает с ошибкой "Object is used elsewhere" на строке
g.DrawLine(settings.TopPeakPen, x, midPoint, x, midPoint - lineHeight);
Я не очень понимаю, как это может быть, так как экземпляр g создается уникальный для каждого вызова функции Render.