我從WPF應用程序中的c#代碼訪問C++ dll庫。從ui線程訪問dll時,我沒有任何問題。但是我需要在C++ dll的代碼運行時UI才能響應。所以我嘗試從另一個線程訪問它。但是,當我嘗試在非UI線程中第一次調用相同的函數(我通過ui線程調用)時,該函數返回,但返回值指示函數中存在內部錯誤。但是當我從非UI線程運行代碼時,它成功返回一個非錯誤值。我沒有dll的源代碼,所以我不知道里面會發生什麼。在WPF中使用PInvoke與ui/non-ui線程差異
C++函數
UINT32 myfunc1()
在C#
[DllImport("mydll.dll")]
public static extern uint myfunc1();
我在UI線程如何到達代碼
uint errorCode = myfunc1(); // returns 0 means no error occured
我在非UI線程如何到達代碼
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, args) => { args.Result = myfunc1(); };
// 1st call args.Result is 10 means internal error ocurred
// 2nd call args.Result is sometimes 0 and sometimes 10
// 3rd or later calls args.Result is 0 means no error occured
worker.RunWorkerCompleted += doSth();
worker.RunWorkerAsync();
什麼是你的問題? –
我想問題是爲什麼第一次在非UI線程中調用dll函數時出現錯誤。 –