問題タブ [eventargs]
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.
.net - 高パフォーマンスのシナリオで「イベント」をどのように処理しますか?
更新:以下で説明する各手法のメモリへの影響をテストするプログラムを作成しました。それほど驚くことではありませんが、確かに、.NET イベントを使用する従来のアプローチは、他のアプローチよりも多くのガベージを作成することがわかりました (つまり、他の 2 つの戦略はどちらも作成しないように見えるのとは対照的に、実際にはガベージを作成します)。ゴミは一切ありません)。
実際、速度に関するコストよりも、.NET イベントの引数のメモリオーバーヘッドに関心があることを最初から強調しておくべきでした。最終的には、メモリと速度の両方の点で、すべての実用的な目的のために、コストはごくわずかであることを認めなければなりません。それでも、「従来の」方法で多くのイベントを発生させると、何らかのコストがかかること、そして極端な場合には、第 1 世代のガベージ コレクションにつながる可能性があることは興味深いと思いました。状況(私の経験では、システムがより「リアルタイム」である必要があるほど、ガベージが作成されている場所と、必要に応じてそれを最小限に抑える方法に注意することがより重要です)。TEventArgs
これはばかげた質問のように思えるかもしれません。たとえば、Windows フォームは、常に数百または数千のイベント (Control.MouseMove
イベントなど) が非常に急速に連続して発生するため、「高パフォーマンス」のシナリオと簡単に見なすことができます。しかし、クラスが高パフォーマンスでタイム クリティカルなコードで使用されることが予想される場合に、.NET イベントを使用してクラスを設計することが本当に合理的かどうか疑問に思っています。
私が持っている主な懸念は、イベントが発生/処理されるたびにインスタンス化する必要があるクラスから派生し、おそらくクラスであるEventHandler<TEventArgs>
すべてのイベントに似たようなものを使用するという規則です。(単純な場合、明らかに、これは使用できるケースではありません。ただし、意味のある非定数情報が型に含まれていると仮定すると、インスタンス化がおそらく必要になります。)高性能ライブラリが作成されることを期待しています。TEventArgs
EventArgs
EventsArgs
EventArgs.Empty
TEventArgs
とはいえ、私が考えることができる唯一の選択肢は次のとおりです。
- イベントに型にはまらないデリゲート型 (つまり、 ではない) を使用し、 、 など
EventHandler<TEventArgs>
のオブジェクトのインスタンス化を必要としないパラメーターのみを取得します( 、既存の文字列オブジェクトへの参照を渡すこともできます)。int
double
string
- イベントを完全にスキップし、仮想メソッドを使用して、必要に応じてクライアント コードを強制的にオーバーライドします。これは基本的に前のアイデアと同じ効果を持っているようですが、より制御された方法です。
.NET イベントの GC プレッシャーに関する私の懸念は、そもそも根拠のないものですか? もしそうなら、私はそこに何が欠けていますか? または、私がリストした 2 つよりも優れた 3 番目の選択肢はありますか?
mvvm-light - EventToCommand と PassEventArgsToCommand を使用して :: 送信者またはより良いメタファーを取得するには?
私がやっていることのポイントは、ビューモデルで発生する必要があることがたくさんあるということですが、コンストラクターではなく、ビューがロードされたときです。イベント ハンドラーを接続してメッセージを送信することもできますが、それはちょっと雑に思えます。このロジックが含まれている基本ビューと基本ビューモデルを実装しているので、すべてのビューがデフォルトで取得されることを願っています。
おそらく、私が望んでいるもの、つまり送信者を取得することさえできません。これがRoutedEventArgs.OriginalSourceが本来あるべきものだと思いましたか?
[編集] とりあえず、xaml.cs に EventHandler を接続しましたが、案の定、OriginalSource もそこで null です。したがって、コマンドでもビュー/送信者への参照を取得できるかどうかを知る必要があると思いますか? [/編集]
私の実装では、「ウィンドウ」の作成を担当するビューモデルへのヘルパー クラスが、すべてのウィンドウが追加される「ホスト」コントロールを認識している必要があります。eventtocommand を使用する範囲外でこれを達成するための提案を受け入れます。:)
(Unloaded のコードは同じです)
asp.net - asp.net コントロール イベントで使用する eventargs クラスを見つける方法
マークアップでコントロールにイベントを追加した場合 (たとえば、EntityDataSource で OnUpdating を追加した場合)、メソッド パラメーター リストを見つけるにはどうすればよいですか?
たとえば、どのように入力することを知っていますか
それ以外の
FormView OnDataBinding イベントには、より具体的な EventArgs クラスがありますか?
.net - .net: 3 層の Windows アプリケーション プロジェクトでは、どこで EventArg クラスを宣言する必要がありますか?
3 層 Windows アプリケーション プロジェクトでは、どこで EventArg クラスを宣言する必要がありますか?
c# - EventArgs クラスとイベント キーワードの間に特別な関係はありますか?
イベントを実装するためのガイドラインを読んだすべての .NET 本で、EventArgs
EventHandler をサブクラス化して使用する必要があると説明しています。http://msdn.microsoft.com/en-us/library/ms229011.aspxで詳細を調べたところ、「イベント ハンドラーとして使用する新しいデリゲートを手動で作成する代わりに、System.EventHandler を使用してください」と表示されています。EventArgs を使用する重要な理由があることは理解していますが、私の質問は「このようにすべきか」ではなく、「このようにすることができるか」です。
EventHandler
イベントで の代わりにジェネリック デリゲートを使用できない理由はありますか? たとえば、厳密に型指定された送信者が必要な場合 (他の誰かがそれに悩まされobject sender
ますか?) 。
私が言いたいことをよりよく説明するために、次のことがうまくいかない理由はありますか?
c# - カスタム イベント ハンドラからアイテムを返す方法
私が取り組んでいるプロジェクトでは、項目がリストに追加されるたびにイベントを開始できる必要があります。これを実現するために、List から継承するカスタム List クラスを作成し、OnAdd イベントを追加しました。また、追加されているアイテムを EventArgs として返したいと思います。そのために、さらにコードを追加しました (以下を参照)。
これは、ハンドラーを追加する方法です
しかし、OnAdd メソッドでは:
e.Equals、e.GetHashCode、e.GetType、e.ToString のみにアクセスでき、Client クラスのメンバーにはアクセスできません。
c# - イベント引数での IEnumerable のベスト プラクティス
オーディオと MIDI のポートと接続を管理するためのクラスを含む DLL があります。ポートが登録または登録解除されるか、接続が形成または解放されるたびに、このクラスは、プロパティやプロパティをConnectionChanged
含むカスタム イベント引数と同様に、イベントを発生させます。Enum ChangeType
IEnumerable<Connection> ChangedConnections
ここで私の質問は次のとおりです。変更された接続を送信するか、イベント引数のプロパティを変更して、Connections
すべてのアクティブな接続を含む IEnumerable を送信する必要がありますか?
c# - ボタンクリックイベントでカスタム EventArgs クラスにアクセスするには?
フォローアップとして: カスタム eventargs クラス内の値にアクセスする
ボタンクリックまたはその他の方法を使用して、カスタム Eventargs クラス内のパブリック変数にアクセスするにはどうすればよいですか?
カスタム イベント引数クラスの例:
button_click イベントの背後にあるコード:
手伝ってくれてありがとう。
c# - イベント引数のベストプラクティスと更新の問題
カスタムEventArgsクラス内の選択した変数のみを更新できますか、それともすべてを同時に更新する必要がありますか?たとえば、このメソッドが呼び出された場合:
<修正済み; 上記は、メソッド呼び出しを使用してEventArgsを更新するための誤った構文であることが指摘されています。つまり、「new」キーワードは、更新されていない新しいEventArgです...これは疑問を投げかけます。完全または部分的に呼び出す(すべてではなく一部の変数のみ)...>
更新したくない変数を省略できますか..'TraderEventArgs(,, var3)??
または、TraderEventArgs.var1とTraderEventArgs.var2を空のままにしますか?
これは、複数のEventArgsクラスを作成する必要があるかどうか、またはすべての(場合によっては無関係な)無関係なデータを1つのカスタムEventArgsクラスにまとめて保存できるかどうかに関する質問です。
訂正:他の無関係なデータと同時に更新される場合とされない場合がある1つのイベント引数クラスに、いつか無関係なデータを一緒に格納することが可能かどうかを尋ねています...以前はそれについて明確ではなかったかもしれません..。。
c# - 「送信者」オブジェクトを介して「メソッドグループ」を確認する方法は?
次のようなメソッドを想像してください (Win フォームで):
つまり、「GetData」を呼び出しているメソッドを知りたいということです。グローバル変数を持って何かに設定できることは知っていますが、これを行う直接的な方法があるかどうか知りたいですか?
ありがとう。