我有一个应用程序,可以在需要时捕获32位DirectX应用程序(BlueStacks)的屏幕截图。它使用Direct3DHook(http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/)来获取屏幕截图。它工作正常,但在大约150次调用之后,它崩溃了BlueStacks(而不是正在执行捕获的程序)。
"负载测试" Direct3DHook下载附带的TestScreenshot应用程序上的按钮不会导致BlueStacks崩溃。所以我修改了Direct3DHook附带的TestScreenshot应用程序来执行下面的简单代码,它确实使BlueStacks崩溃了。有没有人知道为什么下面的代码不能和'#34;负载测试"按钮?
private void button1_Click(object sender, EventArgs e)
{
new Thread(testCapture).Start();
}
public void testCapture()
{
for (int i = 0; i < 200; i++)
{
Bitmap b = _captureProcess.CaptureInterface.GetScreenshot().CapturedBitmap.ToBitmap();
b.Dispose();
}
}
答案 0 :(得分:1)
通过调用Screenshot对象上的Dispose()解决了我的问题。我不确定为什么TestScreenshot程序没有导致BlueStacks崩溃,即使它没有Dispose()截图,但在上面的例子中,这就是所需要的,如下所示:
private void button1_Click(object sender, EventArgs e)
{
new Thread(testCapture).Start();
}
public void testCapture()
{
for (int i = 0; i < 200; i++)
{
Screenshot s = _captureProcess.CaptureInterface.GetScreenshot();
Bitmap b = s.CapturedBitmap.ToBitmap();
s.Dispose();
}
}