1

VB.Net のスレッド化と同期化の概念は初めてです。

現在、Windows フォーム アプリケーションをコンソール アプリケーションに変換する作業を行っています。フォーム アプリケーションは、非同期プロセスに使用される DLL を使用します。

    public ProcessCaller(ISynchronizeInvoke isi)
        : base(isi)
    {

    }

しかし、このフォーム アプリケーションをコンソール アプリケーションに変換すると、コンソール アプリケーション クラスをこの DLL に渡すことができません。

「「X」から「Y」にキャストできません」というエラーが表示されます

私を助けてください。

前もって感謝します

4

1 に答える 1

1

ISynchronizeInvoke通常、すべての UI 操作を同じスレッドで実行する必要があるクライアント アプリで、「正しい」スレッドに戻るために使用されます。これは通常、メッセージ ポンプ/イベント ループを介して行われます。これは通常、コンソール アプリには存在しませんか?

コンソール アプリでのスレッド要件は何ですか? 何も持っていない場合は、おそらくISynchronizeInvoke常にetcfalseから返される独自のノーオペレーション実装を作成できます。これInvokeRequiredは、実装の最初の試みです-テストされていません。念のため...

public class NoOpSynchronizeInvoke : ISynchronizeInvoke
{
    private delegate object GeneralDelegate(Delegate method,
                                            object[] args);

    public bool InvokeRequired { get { return false; } }

    public Object Invoke(Delegate method, object[] args)
    {
        return method.DynamicInvoke(args);
    }

    public IAsyncResult BeginInvoke(Delegate method,
                                    object[] args)
    {
        GeneralDelegate x = Invoke;
        return x.BeginInvoke(method, args, null, x);
    }

    public object EndInvoke(IAsyncResult result)
    {
        GeneralDelegate x = (GeneralDelegate) result.AsyncState;
        return x.EndInvoke(result);
    }
}
于 2013-02-11T06:52:13.083 に答える