का उपयोग करते हुए अमान्य ऑपरेशन अपवाद, मैं CopyFromScreen
विधि का उपयोग कर स्क्रीन को कैप्चर करने के लिए एक एप्लिकेशन लिख रहा हूं, और मैं अपने स्थानीय नेटवर्क पर भेजने के लिए कैप्चर की गई छवि को भी सहेजना चाहता हूं। तो, मैं एक बिटमैप पर कैप्चर की गई स्क्रीन को स्टोर करने की कोशिश कर रहा हूं, और दो थ्रेड पर पहले बिट कैप्चर की गई दूसरी बिटमैप को सहेज रहा हूं।बिटमैप को सहेजते समय और ग्राफिक्स.copyFromScreen समानांतर-वाई
हालांकि, यह InvalidOperationException
फेंक रहा है, जो कहता है कि ऑब्जेक्ट वर्तमान में कहीं और उपयोग में है। अपवाद को System.Drawing.dll द्वारा फेंक दिया गया है।
मैंने लॉक करने का प्रयास किया है, और स्क्रीन को सहेजने और कैप्चर करने के लिए अलग-अलग बिटमैप्स का उपयोग कर रहा हूं। मै इसे होने से कैसे रोकू सकता हूँ? प्रासंगिक कोड:
Bitmap ScreenCapture(Rectangle rctBounds)
{
Bitmap resultImage = new Bitmap(rctBounds.Width, rctBounds.Height);
using (Graphics grImage = Graphics.FromImage(resultImage))
{
try
{
grImage.CopyFromScreen(rctBounds.Location, Point.Empty, rctBounds.Size);
}
catch (System.InvalidOperationException)
{
return null;
}
}
return resultImage;
}
void ImageEncode(Bitmap bmpSharedImage)
{
// other encoding tasks
pictureBox1.Image = bmpSharedImage;
try
{
Bitmap temp = (Bitmap)bmpSharedImage.Clone();
temp.Save("peace.jpeg");
}
catch (System.InvalidOperationException)
{
return;
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Interval = 30;
timer1.Start();
}
Bitmap newImage = null;
private async void timer1_Tick(object sender, EventArgs e)
{
//take new screenshot while encoding the old screenshot
Task tskCaptureTask = Task.Run(() =>
{
newImage = ScreenCapture(_rctDisplayBounds);
});
Task tskEncodeTask = Task.Run(() =>
{
try
{
ImageEncode((Bitmap)_bmpThreadSharedImage.Clone());
}
catch (InvalidOperationException err)
{
System.Diagnostics.Debug.Write(err.Source);
}
});
await Task.WhenAll(tskCaptureTask, tskEncodeTask);
_bmpThreadSharedImage = newImage;
}
जहां यह तय करता है कि कुछ उपयोग में है? – BugFinder
मुझे लगता है कि यह '_bmpTreadSharedImage' है जिसे आपने ऊपर दिए गए कोड में शामिल नहीं किया है जो समस्या पैदा कर रहा है? – DavidG
@ बगफाइंडर अपवाद अनचाहे संदेश 'application.Run (new form1())' line.cs में 'लाइन' पर आता है, और 'CopyFromScreen' और 'बिटमैप। सेव' विधियों को हाइलाइट किया गया – Priyank