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 关注
- 98 浏览
添加回答
举报