問題タブ [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# - マルチスレッド、アクセス UI コントロール
通常の UI スレッドとバックグラウンド ワーカーを備えたシンプルなアプリがあります。バックグラウンド ワーカーでは、LinkLabels を動的に作成して FlowLayoutPanel に配置する必要があります。これを行うには、LinkLabel の親を FlowLayoutPanel に設定する必要があります。
これは私が現在持っているコードのスニペットですが、「l.Parent = panel;」という行で悪名高い「クロススレッド操作が無効です」というメッセージが表示されます。
私はマルチスレッド操作にかなり慣れていませんが、正しく呼び出したと思っていましたが、明らかにそうではありませんでした。助言がありますか?
c# - InvokedRequiredはどうなりますか?
私のコードの何が問題になっていますか?
なぜそれは本当の声明に行かないのですか?
c# - InvokeRequied #2 の何が問題になっていますか?
最初のトピックは、InvokeRequied の何が問題なのかです。
彼が私に勧めてくれたという答えに従ったのですが、新たな問題が見つかりました。
下の図の結果は、クロス スレッド例外です。
私のコードの何が問題になっていますか?
この問題を解決するには?
c# - .Net2.0のプロパティのゲッターでFuncなしで呼び出す
getterでInvokeを使用したいのですが、4.0などではなく.Net2.0を使用する場合の方法を教えてください。.Net> 2.0の場合、使用できますFunc
。.Net2.0の代わりとなるものは何ですか。
.Net 4.0の例を次に示します(リンクから)
c# - GetsContentsRichTextBox()の戻りタイプが間違っています
別のスレッドからリッチテキストボックスの内容を読み取るメソッドを作成しようとしています。以下は私が持っているコードです:
ただし、次のエラーメッセージが表示されます。
'string WindowsFormsApplication1.frmMain.ObtainContentsRichTextBox()'の戻りタイプが間違っています
私は何か単純な間違いをしていると確信していますが、私はC#の初心者です。誰かが私が間違っていることについて私に指摘できますか?
c# - BeginInvoke は UI をブロックしていますが、Invoke はそうではありません。
クロス スレッド アクセスで遭遇したシナリオと混同しています。これが私がやろうとしていることです:
メイン UI スレッド - メニュー項目のクリック バックグラウンド ワーカーを作成して非同期で実行する
方法ExecuteTheActionSelected
は次のとおりです。
持っていlocalBackgroundWorker_DoWork
ます:
Execute
UIスレッドでイベントハンドラーを実際に呼び出すメソッドインボーカーを持つそのクラスのメソッド:
UI イベント ハンドラは次のとおりです。
ここで、クロス スレッドの問題が発生します。
ここでInvoke は UI をブロックしませんが、BeginInvoke はブロックします。私は非常に混乱しているので、このシナリオを理解するのを手伝ってください。
vb.net - 更新時に別のフォームのプログレスバーがフリーズ/クラッシュする
デバッグできないような奇妙な例外があります。ワーカースレッドを提案しようとしている人は、仕事でそれらを使用することを禁じられています...なぜそうしないのかと自分自身に尋ねたところ、漠然とした答えとそれを避けるための明確な指示を受け取りました...とにかく...
ライブラリ クラスから直接初期化および表示される別のフォームに進行状況バーを表示することにしました (メイン フォームとは独立して、別のスレッドで実行されます)。このクラスはフォーム自体を初期化しますが、私は control.InvokeRequired と control.Invoke を使用しているので、フォームを別の場所で再利用できます。以下は、進行状況バーを初期化するためのものです。
ステップ関数については次のとおりです。
以下は、進行状況バーを含むフォームを起動し、ステップ呼び出しを送信するテスト コードです。
ここまでは順調です... step メソッドが呼び出されるたびに、プログレス バー フォームの Form.Refresh メソッドを呼び出していることがわかります。フォームが起動すると、プログレスバーのいくつかのステップの後にクラッシュするため、これを行うことになりました。この時点で、フォームをクリックするとクラッシュすることを除いて (更新のため)、フォームはクラッシュすることなく表示されます (Visual Studio によって例外はキャッチされません)。奇妙なことに、プログレス バーを更新するためのライブラリ クラスのコードは、問題が単に Win32 ウィンドウにあるかのように問題なく続行されます。クラッシュに関連する Windows メッセージは次のとおりです。
説明: 問題が発生したため、このプログラムは Windows との対話を停止しました。問題の署名: 問題イベント名: AppHangB1 アプリケーション名: DL_RDS_Sort.vshost.exe
メイン フォーム スレッドからフォームを起動しようとしましたが、結果は同じでした。何が起こっているのかわかりません...どんな助けも大歓迎です= D
物事がどのように呼び出されているかを正確に更新してください:
MainForm から、ライブラリ クラス内で定義されたサブルーチンのアドレスでスレッドが開始されます。
次に、このスレッドのルーチンで、フォームの初期化をテストし、パフォーマンス バーのプロパティを更新するために記述したメソッド (前述) を呼び出します。
テスト領域の後にはさらに多くのコードがありますが、サブルーチンを終了するため、呼び出されることはなく、この問題には関与していないことに注意してください。私は通常 ShowDialog を使用しますが、これは私が望むものではない実行を停止します。
言及する価値のあるいくつかのこと: - frmProgress には、ControlBox プロパティが false に設定されています。- frmProgress の FormBorderStyle は FixedDialog に設定されています
また、Show() メソッドを使用すると、表示されたフォームの上にマウスを置くと、Windows の「ビジー サークル」カーソルが表示されます。ShowDialog() にはこの動作がありません...フォームが何かを待っているかのようです...これで私の問題が明確になることを願っています。
vb.net - Trueが期待される場合、InvokeRequiredはfalseを返し続けます
私は次のテストコードを持っています。何の役にも立ちませんが、VBを理解するためにあります。
フォームはaButton
と。で構成されLabel
ます。
学習目的のために、別のスレッドのラベルのテキストを変更するメソッドを配置しました。ただし、InvokeRequired
値は戻り続けFalse
ます。これはどのように可能ですか?はLabel1
メインスレッドで作成され、runThreadで調整されているためInvokeRequired
、Trueが得られるはずです。
ここで、これはフォームのハンドルがまだ作成されていないときに発生することを読んだので、Run
メソッドを変更しました。
これは問題を解決しません。
c# - コントロールを呼び出す次のデリゲートとメソッドの修正
DoWork イベント ハンドラーでリストビューの項目にアクセスする必要があります。このために、私が書いたリストビューを呼び出すデリゲートとメソッドは次のとおりです。
コントロールを呼び出して作業するのはこれが初めてです。だから私が間違っているところを教えてください。私が得る1つのエラーはgsm_modem.Form1.getItems(System.Windows.Forms.ListView): not all code paths return a value
. 私が書いたことは間違っているかもしれないとさえ思います。訂正お願いします..
multithreading - スレッドの奇妙な動作
MODBUS プロトコルを使用して一部のハードウェアと通信するアプリケーションを作成しています。Code Project のこのサンプル
を使用しています。
コード (主にPollFunction
関数) を最適化しようとしているときに、非常に奇妙なスレッド ロックに遭遇しました。
文字列の各行をデリゲートに送信する代わりにDoGUIUpdate
、文字列配列を作成して全体として送信しています。
これを行うと、アプリケーションがエラーでクラッシュしSystem.Reflection.targetParametercountException: Parameter count mismatch
ます。
元のコード:
私のコード:
どんなアドバイスでも大歓迎です。