在我的程序中,很多时候我需要保存屏幕截图然后对其进行处理。此前,没有出现任何错误,并且可以正常工作几个小时。但现在我添加了以下方法:
private async Task CheckTable()
{
Image image = CaptureScreen(757, 476, 0, 0, size3);
image.Save(@"C:\ImageTests\screeeen.jpg", ImageFormat.Jpeg);
using (Tesseract tesseract = new Tesseract(@"C:\langs", "rus", OcrEngineMode.TesseractLstmCombined))
{
tesseract.SetImage(new Image<Bgr, byte>(@"C:\ImageTests\screeeen.jpg"));
tesseract.Recognize();
if (tesseract.GetUTF8Text().Replace("\r\n", "").Contains("Вы успешно") || tesseract.GetUTF8Text().Replace("\r\n", "").Contains("не доступен"))
{
return;
}
else
{
await Task.Delay(50);
await CheckTable();
}
}
}
并在如下代码中使用它:
var tableCheck = CheckTable();
await tableCheck;
tableCheck.Dispose();
然后在一段随机代码中,我还保存了照片,在一段时间后开始出现错误:
System.Runtime.InteropServices.ExternalException: "A generic error occurred in GDI+."
如何解决这个问题?
他们忘记发布照片,所以她没有发布文件。
一般来说,GDI+ 在处理文件时有一些怪癖,但值得考虑。
至于
tableCheck.Dispose();——Task.Dispose()没必要打电话。你可以通过这种方式摆脱递归;顺便说一句,你不需要方法中的异步。
并像这样调用
顺便说一句,您可以完全不使用该文件