我几乎在互联网上到处搜索,我google了很多次,找到了很多结果,但我仍然找不到我的问题的解决方案。
我正忙于将旧WinForms
应用程序转换为新的 WPF 应用程序,但某些命令遇到了问题。在 Winforms 应用程序中,他们使用Control.BeginInvoke()
并将其存储在 IAsyncResult 对象中。我已经读到这Dispatcher.BeginInvoke()
与forWPF
等效,但是当我使用时出现此错误Control.BeginInvoke()
WinForms
Dispatcher.BeginInvoke():“无法将类型'System.Windows.Threading.DispatcherOperation'隐式转换为'System.IAsyncResult'。存在显式转换(您是否缺少演员表?)”。
任何帮助将不胜感激。
这是我要转换的代码。这是原始WinForms
代码。我能够转换除 BeginInvoke 部分之外的所有内容。
private eSkan.api.TeSkanAPI feSkanAPI = null;
private void MessageFilter_AddRemove_Invoked(bool AddFilter, IMessageFilter Filter)
{
if (AddFilter){ Application.AddMessageFilter(Filter); }
else { Application.RemoveMessageFilter(Filter); }
}
private void MessageFilter_AddRemove(bool AddFilter, IMessageFilter Filter)
{
{
IAsyncResult sr = BeginInvoke((ESKAN_ADD_REMOVE_MESSAGEFILTER)MessageFilter_AddRemove_Invoked,
AddFilter, Filter);
sr.AsyncWaitHandle.WaitOne(2000);
}
}
下面是我到目前为止转换的代码,包括我正在努力解决的 BeginInvoke 部分。
private void MessageFilter_AddRemove_Invoked(bool addFilter, System.Windows.Forms.IMessageFilter filter)
{
if (addFilter)
{
System.Windows.Forms.Application.AddMessageFilter(filter);
}
else
{
System.Windows.Forms.Application.RemoveMessageFilter(filter);
}
}
private void MessageFilter_AddRemove(bool addFilter, System.Windows.Forms.IMessageFilter filter)
{
{
IAsyncResult sr = System.Windows.Threading.Dispatcher.BeginInvoke((ESKAN_ADD_REMOVE_MESSAGEFILTER)MessageFilter_AddRemove_Invoked, addFilter, filter);
sr.AsyncWaitHandle.WaitOne(2000);
}
}
如果还有其他错误,请告诉我。
谢谢