私はインターネット上のほぼすべての場所を検索し、何度もグーグルで検索して非常に多くの結果を見つけましたが、それでも問題の解決策を見つけることができません.
古いWinForms
アプリケーションを新しい WPF アプリケーションに変換するのに忙しいのですが、いくつかのコマンドで問題が発生しています。Winforms アプリケーションではControl.BeginInvoke()
、これを使用して IAsyncResult オブジェクトに格納します。はforと同等であると読みましたDispatcher.BeginInvoke()
が、使用するとこのエラーが発生しますWPF
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);
}
}
他に間違いがありましたら、お知らせください。
ありがとう