問題タブ [invokerequired]
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.
c# - 利用可能なコントロールがないときに Invoke() する方法
接続ハンドラー (ユーザー名とパスワードを要求するダイアログ) を作成しています。コードは、ダイアログを表示するハンドラーです。このコードはスレッドから呼び出すことができるので、Invoke()
ifが必要ですInvokeRequired
。
Control
理想的な状況では、 to doでハンドラーを初期化できますInvokeRequired
が、Control が null になることもあります。出来ますか?コードをどのように実装できますか? 以下は正しいですか?
}
私の質問は次のとおりです。
- null コントロールを
InitializeMethod()
- UIThread で Initialize() メソッドを実行すると、コードは後で機能しますか?
- テストするコントロールがない場合に推奨されるパターンは何
InvokeRequired
ですか?
前もって感謝します
EDIT : いくつかのテストを行ったところ、null を に渡すとInitialize()
、コントロールが UI スレッドで実行されていないため、InvokeRequired が false を返すように見えることがわかりました。いつも。だから私の質問は、私が制御できないときにどうすれば本当の(フィアブル)呼び出しを実行できるのですか?
EDIT2:mInvokeControl.CreateControl()
実行すると問題が修正されます。
c# - プロパティ getter を使用した C# InvokeRequired
ゲッターをスレッドセーフにしたいと思います。これを行うと、エラーが発生します。
エラーがあります:
winforms - backgroundworkerスレッド内のWindowsフォームへの正しいアクセス
私はwinformsアプリを持っており、Backgroundworkerスレッド内のメインフォームのHandleプロパティにアクセスする必要があります。
InvokeRequiredを使用してメインフォームを呼び出すスレッドセーフなメソッドを作成しました。私の質問は、次のようにこのスレッドセーフメソッドを呼び出した場合でも、「InvalidOperationExceptionクロススレッド操作が無効です」というエラーが発生するのはなぜですか。
そして、以下はスレッドセーフメソッドのコードです(私のメインのアプリフォームはアップデーターと呼ばれています):
私はsmthを間違っていますか?前もって感謝します。
後で編集:最初にハンドルが必要な理由を投稿します。おそらく別の解決策/アプローチがあります。私のBackgroundworkerスレッドでは、ループ内に複数のプログラムをインストールする必要があり、インストーラーごとにプロセスを開始します。ただし、この操作が管理者だけでなく標準ユーザーでも機能するように、昇格を要求する必要があります。要するに、私はここのチュートリアルに従おうとしています
.net - InvokeRequired にこだわる理由
Invoke/BeginInvoke を使用してワーカー スレッドから UI スレッドに属するコンポーネントに変更を加える関数またはプロシージャを呼び出す必要があることを理解しています...
私の質問は - InvokeRequired をわざわざチェックする正当な理由はありますか? さまざまな状況で、イベント ハンドラーがワーカー スレッドまたは UI スレッドから呼び出されるとします。UI スレッド自体が最終的に実行するメソッドで Invoke を呼び出すと、何か影響がありますか?
言う...
ここで、event1 が UI スレッドから発火し、Event 2 および/または 3 が他のスレッドから発火するとします。イベント 1 の呼び出しには危険がありますが、その必要はありません。少し効率が悪いのでしょうか?
c# - 呼び出しでテキストを削除しますか?
したがって、Invokeプロパティに関してこれまでにオンラインで見つけたドキュメントは、特に良いとは思えません。これは、信じられないかもしれませんが、実際にはちょっと面倒です。Invokeの機能を理解しています。GUIに直接安全にアクセスすることはできないため、invokeは安全な方法でアクセスします。それは問題ありませんが、メソッドに含まれる変数がわかりません。たとえば、リストボックスからテキストを削除したい場合、どうすればよいですか?私は少し道に迷う前にこれについてずっと理解しています。
c# - StatusBar.Invoke メソッドが ToolStripProgressBar に対して機能しないのはなぜですか?
ToolStripProgressBar
私は最近、コントロールに含まれるコントロールを介してステータス バーに別のスレッドの進行状況を表示したいアプリケーションに取り組んでいますStatusBar
。このコードを追加しようとする前に、もともとコントロールのテキストを変更するコードを持っていましたToolStripStatusLabel
。これを行うには、デリゲートで Invoke メソッドを使用し、すべて正常に機能しました。ToolStripProgressBar
ただし、ステータスバーのメソッドへの呼び出しでこれを試みたときに、通知なしで失敗したことがわかりましたInvoke
(エラーなし、例外なし、何もありません)。私が学んだことは、このように進行状況バーを使用するには、BackgroundWorker
コントロールを使用する必要があるということです。Invoke
私のコードは機能しますが、すでに機能しているように見えるメソッドを使用できなかった理由がわかりません。
何が機能し、何が機能しなかったかの例:
これはうまくいきました
これはうまくいきませんでした
機能しなかった例では、InvokeRequired
プロパティが true であるため、Invoke
メソッドが呼び出されても何も起こりません。incrementProgressBarMethod
ここで、今度は whereInvokeRequired
が false であるため、Increment
メソッドを起動できるように再度呼び出すと予想していました。
なぜこれがうまくいかないのか本当に知りたいです。私が言ったように、私はすでに を使用するように改造しましたBackgroundWorker
。説明が欲しいだけです。
winforms - 参照型と値型を組み合わせて渡す必要がある場合、Control.Invoke を使用するにはどうすればよいですか?
次のようなことをするにはどうすればよいですか?
これを行うたびに、Object of type 'System.Int32[]' cannot be convert to type 'System.Int32' が発生し、問題を解決する方法がまったくわかりません。おそらくこれを非常に異なる方法でコーディングできますが、なぜこれができないのかに興味があります。
c# - InvokeRequired チェック中の Stackoverflow エラー
InvokeRequired の実行中に stackverflow エラーが発生します。
System.StackOverflowException は処理されませんでした
修正方法は?詳細を表示する情報はありません。
修正版:
c# - C# Windows フォーム カスタム コントロール クロススレッド操作
メイン ウィンドウ フォームが 1 つあり、そのフォーム内にアプリケーションのさまざまな画面を表すカスタム コントロールがあります。このコントロールの子コントロールにアクセスしたい。ここで得られないことがあります...時々、このエラーが発生します:
しかし、すべてがうまくいくこともあります。エラーの理由が完全にはわかりません...おそらく、コントロールに変更を加えるイベント(Form1クラス内)を持つ外部デバイス(MEI BillAcceptor)の何か...簡単なコードを書きましょう...
特定のイベントが発生すると、メソッド changeValue が form1 から呼び出されます...
したがって、最も厄介なことは、すべてが実際に機能する場合があることです...だから私の質問は、「ここで Invoke を使用する必要がありますか?」または、アプリケーションへの変更を少なくしてこれを解決するにはどうすればよいですか...
c# - 拡張機能/メソッドのファイルでInvokeメソッドを使用する方法は?
さて、私は文字列、ラベル、リンクラベル、クラスなどに役立つ拡張機能/メソッドのファイルを書いています。
しかし、私には問題があります。showMessage()
ラベルのテキストを変更するメソッドがありますが、正常に機能します。しかし、私はそれをスレッド実行で機能させることにし、それから私はこれを行います:
すみません、タイプミスでした。このコードをフォーラムに入力しました。エラーは続きます。
ドキュメントによると、Invokeメソッドを使用するには、以下をインポートする必要があります。
名前空間: System.Windows.Forms
アセンブリ: System.Windows.Forms(System.Windows.Forms.dll内)
それから私はしました:
しかし、これは同じエラーを返します:
どうすればこれを修正できますか?
前もって感謝します。