2 回答

TA貢獻1815條經驗 獲得超13個贊
免責聲明:我對 WimgApi 軟件包沒有任何經驗。但是該方法存在重載,WimgApi.RegisterMessageCallback該方法采用將傳遞給回調的任意對象。所以請嘗試這個:
WimgApi.RegisterMessageCallback(wimHandle, MyCallbackMethod, this);
并在回調中:
var form = (MyForm)userData;
if (form.InvokeRequired)
{
form.Invoke((MethodInvoker)(() => UpdateProgressUI(...)));
}
else
{
form.UpdateProgressUI(...);
}

TA貢獻1810條經驗 獲得超5個贊
在這里做出一些假設,但如果您一次只顯示一個進度表單,那么您應該能夠避免存儲對其的靜態引用。IE:
class ProgressForm
{
private static ProgressForm staticRef;
private void Form_Loaded(object sender, EventArgs e)
{
staticRef = this;
}
private void InternalCallback(uint m, IntPtr w, IntPtr l, IntPtr u)
{
// Ensure we're touching UI on the right thread
if (Dispatcher.InvokeRequired)
{
Dispatcher.Invoke(() => InternalCallback(m, w, l, u));
return;
}
// Update UI components
// ....
}
private static uint StaticCallback(uint m, IntPtr w, IntPtr l, IntPtr u)
{
staticRef?.InternalCallback(m, w, l, u);
return 0;
}
}
- 2 回答
- 0 關注
- 165 瀏覽
添加回答
舉報