0
我有一個C#代碼,它捕獲設備中的指紋。捕獲代碼是用C++ dll編寫的,它通過並行回調來返回圖像以提供實時視圖。但問題是應用程序在捕獲過程中的一段時間後會停止工作。這是因爲只有回調方法。如果我在回調方法中註釋代碼,它工作正常。 我想知道如果回調方法可以放在另一個線程,以便未來的圖像不會在回調方法中崩潰。 以下是我稱呼該方法的方式。在不同的線程中運行回調
/* c# code: */
[DllImport("abc.dll", EntryPoint = "capture", CharSet = CharSet.Auto, ExactSpelling = false, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
static extern int capture(callback liveImageCallback);
private delegate void callback(IntPtr img);
void capture()
{
int ret= capture(callBackLiveImage);
}
public void callBackLiveImage(IntPtr imgPointer)
{
byte[] rawData = new byte[102400];
Marshal.Copy(imgPointer, rawData, 0, 102400);
}
/* c++ code: */
typedef void (__stdcall * Callback)(unsigned char* img);
Callback LiveImageHandler;
void capture(liveCallback)
{
LiveImageHandler = liveCallback;
someMethod();
}
someMethod()
{
LiveImageHandler(raw_img);
}
您確定回調方法「contents」沒有失敗,即Try >> Catch?嘗試{int ret = capture(callBackLiveImage); } catch {} – 2015-03-03 07:06:41
絕對看起來像「XY問題」,在這種情況下,我真的不知道如何在不同線程中運行回調來解決問題。你應該專注於找出回調失敗的原因並解決這個問題。 – 2015-03-03 08:17:48
請再描述一下「停止工作」是什麼意思。它如何停止工作? – 2015-03-03 09:14:06