Я делаю снимок экрана во время выполнения теста пользовательского интерфейса агентом Azure.По какой-то причине эта строка никогда не завершается, ошибок нет, нет исключений, она просто ждет ее бесконечно:
g.CopyFromScreen(Point.Empty, Point.Empty, new Size(recorderParams.SourceWidth, recorderParams.SourceHeight), CopyPixelOperation.SourceCopy);
этот код запускается в отдельном потоке:
captureFrameThread = new Thread(TakeScreenshot)
{
IsBackground = false
};
captureFrameThread.Start();
и полные методы выглядят так:
public byte[] TakeScreenshot()
{
byte[] buffer = new byte[recorderParams.SourceWidth * recorderParams.SourceHeight * 4];
HooksSetup.AppendToFile("Taken screenshot 1");
using (var bmp = new Bitmap(recorderParams.SourceWidth, recorderParams.SourceHeight))
{
using (var g = Graphics.FromImage(bmp))
{
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
//it gets stucked on a call below
g.CopyFromScreen(Point.Empty, Point.Empty, new Size(recorderParams.SourceWidth, recorderParams.SourceHeight), CopyPixelOperation.SourceCopy);
g.Flush();
var bits = bmp.LockBits(new Rectangle(0, 0, recorderParams.SourceWidth, recorderParams.SourceHeight), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
Marshal.Copy(bits.Scan0, buffer, 0, buffer.Length);
bmp.UnlockBits(bits);
}
}
return buffer;
}
На моей локальной машине этот код всегда работает безупречно.Почему это так?Какая у меня альтернатива?