問題タブ [invoke]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
4737 参照

c# - 複数の Control.BeginInvoke/Invoke 呼び出しは順番に実行されますか?

Control.BeginInvoke と Control.Invoke の呼び出しが呼び出された順序で実行されるかどうかを知る必要があります。

次のシナリオがあります。

  1. UI スレッドがブロックされている
  2. WCF スレッド呼び出し Control.BeginInvoke
  3. WCF スレッドは Control.Invoke を呼び出します (または、BeginInvoke を再度呼び出します)。
  4. UI スレッドのブロックが解除されました
  5. ??

ステップ 1-4 の実行順序は、示されている順序であることが保証されています (技術的には順序がそのようであるとは限りませんが、私が持っている質問は、順序が示されている場合にのみ関係があります)。

質問は、手順 2 の BeginInvoke 呼び出しの前に、手順 3 の Invoke/BeginInvoke 呼び出しが実行される可能性があるかどうかです。

また、UI スレッドのブロックについてコメントしないでください。

0 投票する
4 に答える
780 参照

c# - オーバーロードされたジェネリック メソッドの検索と呼び出し

オーバーロードされた一般的なメソッドを見つけるにはどうすればよいですか? たとえばQueryable

私は既存のソリューションを探しましたが、それらは十分に汎用的ではない (メソッドのパラメーター数に基づいているなど)、私が持っているよりも多くのパラメーターが必要な (ジェネリック型の定義または引数が必要)、または単純に間違っている (don 'ネストされたジェネリックなどを考慮しないでください。)

定義クラスの型 — Type type、メソッド名 —string nameおよびパラメーター型の配列 (ジェネリック定義ではない) — がありType[] typesます。

.GetGenericArguments()これまでのところ、メソッドの(ジェネリック型ツリー?)を配列.GetParameters ().Select (p=>p.ParameterType)内の対応する項目と比較して、メソッドのtypesジェネリック引数を推測することにより、各メソッドを特定の型にマップする必要がある.MakeGenericMethodようです。

これはタスクには少し複雑すぎるように思えるので、全体を考えすぎているのかもしれません。

何か助けはありますか?

0 投票する
1 に答える
242 参照

c# - `object[] args` が Delegate インスタンスを満たすかどうかを確認していますか?

次のメソッド シグネチャがあります。

デリゲートと引数は、後で呼び出すためにコレクションに保存されます。

引数配列を呼び出さずにデリゲートの要件を満たしているかどうかを確認する方法はありますか?

ありがとう。

編集: リフレクションの実装に感謝しますが、これを行うための組み込みの方法を探しています。車輪を元に戻したくありません。.NET Framework には、既にこのチェックが Delegate.DynamicInvoke() 内のどこかに実装されており、Microsoft の開発者だけが考えることができるクレイジーな特殊なケースをすべて処理する実装があり、単体テストと QA に合格しています。この組み込み実装を使用する方法はありますか?

ありがとう。

0 投票する
5 に答える
17831 参照

c# - InvokeとBeginInvoke

ご挨拶、私はC#でいくつかのアプリケーションを開発しています。現在、私は糸脱毛を扱っていますが、頭に浮かぶ質問があります。InvokeとBeginInvokeの違いは何ですか?私はいくつかのスレッドを読みました、そして私はここでいくつかの有用な情報を見つけました:ここに

ただし、次のコードのInvokeとBeginInvokeの違いは何ですか。

ここで、MyDelegateはMessageHandler関数への参照です。

BeginInvoke lblStatus.Textを使用しても、Invokeを使用するとラベルが更新されるのに対し、Textは更新されないことに気付きました。さらに、Invokeは実行が完了するのを待つことを知っています。私が興味を持っている最も重要なケースは、この場合、ラベルテキストの更新に違いがある理由です。

0 投票する
5 に答える
267 参照

c# - クラスからメソッドを呼び出す

シリアルポート通信アプリケーションを開発しています。クラスを書きました。シリアル ポートのDataReceivedイベントでは、いくつかの文字列操作を行うメソッドを呼び出す必要があります。これらの操作を別のスレッドで行いたい。

しかし、私のアプリケーションはアプリケーションからのウィンドウではないため(クラスのみです)Invoke()、.

では、そうでないクラスでメソッドを呼び出すにはどうすればよいInvoke()でしょうか?

ありがとう

0 投票する
1 に答える
321 参照

c# - バックグラウンド ワーカーの問題

次のクラス/フォーム(半疑似)があるとします:

もちろん、これは BackgroundWorker がなくてもすべて正常なバージョンですが、より応答性の高い UI が必要なので、実装してみます。ただし、グリッドはワーカーによって更新されません (ラベルは正しく更新されます)。任意のヒント?

0 投票する
3 に答える
399 参照

c# - .NETのイベントとマルチスレッドコード

プロジェクトはC#です。

そのため、ライブラリとして実行するように設計されたマルチスレッドコードがたくさんあります。UIとは別のプロジェクトにあります。

私のライブラリには、イベントを発生させるものを作成する前に作成する必要がある中央オブジェクトがあります。

このマスターオブジェクトを一部のオブジェクトに渡して、メインUIスレッドに戻るためにイベントをいつ呼び出す必要があるかをイベントが把握できるようにすることは可能ですか?

彼のイベントハンドラーはほとんどの場合、ランダムなバックグラウンドスレッドから呼び出されるため、UIが大量の呼び出しを行う必要がないようにしたいと思います。

0 投票する
1 に答える
540 参照

.net - インボークメソッドを使用しても「クロススレッド操作が無効です」を取得する

ここで「クロススレッド操作が無効です」と表示されます。

デバッグすると、vlc を呼び出す必要がないことがわかります。ただし、これにアクセスするスレッドは、作成されたスレッドとは異なります。

libvlc.net ラッパーを使用してサウンドを再生していますが、問題はないはずです。この例外を取り除くにはどうすればよいですか?

バックグラウンドワーカーではなくスレッドを使用しています。

ありがとうございました!

0 投票する
3 に答える
5294 参照

c# - BackgroundWorkerはまだInvokeを呼び出す必要がありますか?

最後の質問では、C#で作業をしているときにプログレスバーを表示しますか?、人々はの使用をお勧めしますBackgroundWorker。DoWorkメソッドではGUIを直接更新できると思いましBackgroundWorkerたが、なぜこの関数呼び出しを使用して呼び出す必要があるのですかInvoke

0 投票する
2 に答える
1807 参照

c# - ConstructorInfo.Invoke の DynamicMethod、何を考慮する必要がありますか?

私の質問はこれです:

ConstructorInfo.Invoke呼び出しに対応するDynamicMethodオブジェクトを構築する場合、すべての (またはほとんどの) 型の引数に対処するには、どの型の IL を実装する必要がありますか?呼び出しを行う前に、引数の数が渡されますか?


バックグラウンド

私は IoC コンテナーの 3 回目の反復を行っており、現在、使用されている大量の時間を簡単に削減できる領域があるかどうかを把握するために、いくつかのプロファイリングを行っています。

私が気づいたことの 1 つは、具象型に解決するときに、最終的にConstructorInfo.Invokeを使用してコンストラクターが呼び出され、解決した引数の配列を渡すことになるということです。

私が気づいたのは、invoke メソッドにはかなりのオーバーヘッドがあるということです。これのほとんどは、私が行っているのと同じチェックの別の実装にすぎないのではないかと考えています。

たとえば、コードに一致するコンストラクターがあるため、渡した定義済みのパラメーター名、型、および値に一致するコンストラクターを見つけるために、この特定の呼び出し呼び出しができるはずのもので終わらない方法はありません。適切な数の引数、適切な順序、適切な型、および適切な値に対処するためです。

解決メソッドへの 100 万回の呼び出しを含むプロファイリング セッションを実行し、それを Invoke 呼び出しを模倣するDynamicMethod実装に置き換えると、プロファイリングのタイミングは次のようになりました。

  • ConstructorInfo.Invoke: 1973ms
  • ダイナミックメソッド: 93ms

これは、このプロファイリング アプリケーションの合計実行時間の約 20% を占めています。つまり、ConstructorInfo.Invoke 呼び出しを同じことを行う DynamicMethod に置き換えることで、基本的なファクトリ スコープのサービスを処理するときに 20% のランタイムを削減できます (つまり、すべての解決呼び出しはコンストラクター呼び出しで終了します)。

これはかなり重要なことであり、このコンテキストでコンストラクター用の安定した DynamicMethod ジェネレーターを構築するのにどれだけの作業が必要かを詳しく調べる必要があると思います。

したがって、動的メソッドはオブジェクト配列を受け取り、構築されたオブジェクトを返します。問題の ConstructorInfo オブジェクトは既にわかっています。

したがって、動的メソッドは次の IL で構成されるように見えます。

他に考慮すべきことはありますか?

アプリケーションを「アクセス制限モード」で実行している場合、動的メソッドの作成はおそらく利用できないことを認識していることに注意してください(脳がこれらの用語をあきらめない場合があります)が、その場合、それを簡単に検出して、オーバーヘッドとすべてを使用して、以前と同じように元のコンストラクターを呼び出します。