問題タブ [ui-thread]

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 投票する
3 に答える
10598 参照

wpf - 長時間実行される操作の前に再描画を強制する

ボタンがある場合は、次のようにします。

長い操作により UI スレッドがコントロールを再描画できないため、ボタンはグレー表示されません。バックグラウンドスレッド/ディスパッチャーを開始するのが正しい設計であることは知っていますが、単純な操作には面倒な場合があります。

では、無効な状態でボタンを強制的に再描画するにはどうすればよいですか? ボタンで .UpdateLayout() を試しましたが、効果はありませんでした。WinFormsの使用時に通常動作する System.Windows.Forms.DoEvents() も試しましたが、効果もありませんでした。

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

android - doInBackgroundがAsyncTaskを呼び出して、ブロックUIスレッドをスリープ状態にします

ユーザーがボタンをクリックしたときにリクエストを起動することを目的としたAsyncTaskで構成されるアクティビティがあります。私は答えを探していましたが、同じ問題が見つからなかったか、同じではありませんでした。コードは私が望むことを実行していますが、スピナーが時々(ほとんど常に)回転していないため、ProgressDialogはブロックされているように見えます。

ボタンをクリックすると:

AsyncTaskが起動されます->showDialog()がonPreExecute-> startSearchで呼び出されます(SearchManagerはdoInBackgroundで新しいAsyncTaskを起動し、ネットワークで大量の呼び出しがあります)->ActivityのdoInBackgroundはSearchManagerがロードされるのを待ちます->表示します。

ボタンのコード:

検索アクティビティのAsyncTaskのコード:

SearchManagerAsyncTaskのコード:startSearchによって直接起動されます

私はどうやら何か間違ったことをしているようですが、これを回避する方法と方法を見つけることができません。ご協力いただきありがとうございます !

解決 :

最後に、ProgressDialogが回転しないのは、ProgressDialogの同じインスタンスを使用していたためであるようです。

原因の問題で使用され、私はに変更しました

そして今、それはうまく機能しています。

すべてに感謝し、それがいつか誰かを助けることができることを願っています!

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

c# - 別のスレッドの Win32 DLL で C# パネルの HWND を使用してもよろしいですか?

何かが機能していますが、それが問題ないかどうか、後で問題が発生するかどうかはわかりません。

ビデオ処理を行い、表示に Direct3D を使用する Win32 C++ アプリがあります (私のコードではありません)。私の仕事は、GUI を C# GUI に置き換えることです。

C++ コードを dll にしました。C# で GUI を作成し、ビデオ表示用のパネルを用意しました。このパネルの HWND を dll に渡すと、すべて正常に動作するようです。

しかし - そのパネルは、それが作成されたスレッド以外のスレッドによってアクセスされています。これは行うべきではありません。
私の一部は「十分に一人で去りたい」と思っていますが、これは間違っていると感じており、将来的に問題が発生するのではないかと思います. パネルでクリックイベントをキャッチしたい場合など、パネルを作成したメインスレッドまたは UI スレッド上にあります。

これをどのように行うべきかについての提案はありますか? ありがとう

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

c# - 現在のスレッドのすべてのウィンドウのリストを取得する

WPF アプリケーションで新しい UI スレッドを開始しています。現在、このスレッドのすべてのウィンドウのリストを取得する方法を探していますSystem.Windows.Application.Current.Windows。.NET-Framework に何かありますか、それとも自分で実装する必要がありますか? 私が自分で実装しなければならないとき、おそらく誰かがサンプルコードを少し持っていますか?

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

android - iOS の ([self performSelectorOnMainThread]) のような非アクティビティ オブジェクトから UI スレッドにアクセスする

iOS アプリケーション開発から android に移行したため、以前使用していた機能を見つけるのにいくつかの問題に直面しています。

[self performSelectorOnMainThread:@selector() withObject: waitUntilDone:];このクラスがActivityクラスから継承されていないことを知って、任意のクラスのインスタンスからアクセスできるandroidのような関数はありますか?

これを行う関数があることがわかりましたが、runOnUiThreadアクティビティ以外のオブジェクトから呼び出す必要があるため使用できませんでした。現在表示されているアクティビティにアクセスする方法はありますか、それとも別のソリューションを使用する必要がありますか? .

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

android - Android のメイン UI スレッドでは、SQL または一般的なファイル アクセスは適切ですか?

私は Android のベスト プラクティスに従おうとしているので、デバッグ モードでは次のすべてをオンにします。

メイン (UI) スレッドで何らかの種類のファイル アクセスまたは SQL を使用しようとすると、Android が怒鳴るようになりました。しかし、メイン スレッドでファイル アクセスや SQL を使用することをお勧めします。たとえば、メイン アクティビティは、onCreate()まだ設定されていない場合に備えて、既定の設定値を内部に読み込む必要があります。

おっと --- がonCreate()UI スレッドで呼び出されるため、アプリケーションの最初の実行時にファイル アクセスが発生します。これを回避する唯一の方法は、別のスレッドを開始することです。これにより、設定を読み取ってデフォルト値が既に設定されていることを期待する可能性のある他の UI コードとの競合状態が発生します。

DownloadManager などのサービスも考えてください。ダウンロードをキューに入れると、(メイン スレッドで) ダウンロードが完了したことを知らせるイベントが発生します。そのダウンロードに関する情報を実際に取得するには (ダウンロード ID のみが表示されます)、DownloadManager にクエリを実行する必要があります。これにはカーソルが含まれており、厳密なポリシーがオンになっている場合はエラーが発生します。

では、メイン スレッドでカーソルにアクセスしても問題ないのでしょうか。それとも悪いことで、Android 開発チームと Android 書籍の著者の半数がそのことを忘れていたのでしょうか?

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

multithreading - InvokeOnMainThread()は必ずしもメインスレッドを呼び出す必要はありません-バグまたは機能?

私はを使用してTimerいて、定期的なチェックを実行させています。テスト条件が真の場合、スレッドを開始して、スレッドに実行させる必要があります。

そのスレッド内で、使用しているUIを変更したい場合InvokeOnMainThread()。ただし、スレッドはTimerすでに別のスレッドであるからトリガーされたInvokeOnMainThread()ため、は実際のメインスレッドではなく、タイマーのスレッドで処理を呼び出します。InvokeOnMainThread()私は2つの呼び出しをボクシングすることによってそれを回避します。

これは意図したとおりに機能していますか、それともMonoフレームワークのバグですか?メインスレッドは、現在のスレッドをトリガーしたスレッドとして定義されていますか、それとも「ルート」スレッドを返すことになっていますか?

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

android - ListView onItemClick が常に反応しない、Busy UIThread

各行に 4 枚の写真を含むListViewと、それらすべての写真のダウンロードを処理する写真ダウンロード マネージャーがあります。ListView に到着したときにあまりにも多くのスレッドが作成されたため、写真をダウンロードするスレッドの数を制限しました (以前は : 1 行あたり 4 枚の写真 * 5 または 6 行表示 => 20/25 スレッド、および + の場合スクロールします)

そのため、UI スレッドがビジー状態になり、写真の読み込み中にアイテムをクリックすると、OnItemClickEventがスキップされることがあり、ユーザーはクリックのダウンロードの終了を狂ったように待たなければなりません。

そのようなスキップされたイベントを回避する方法はありますか?

更新: 写真がダウンロードされるたびにブロードキャストを送信し、ListViewアダプターでnotifyDataSetChangedを送信しています。

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

android - Android onLayout() と AsyncTask() が連携しない

ヘッダーが固定されたスクロール可能なテーブルが必要なので、この素晴らしいブログをフォローしましたが、すべて問題ありません。

アイデアは、ヘッダー用に 1 つのテーブルを使用し、スクロールビューに追加されたコンテンツ用に 1 つのテーブルを使用することです。どちらもカス​​タマイズされた LinearLayout にあります。カスタマイズされた LinearLayout では、onLayout() を上書きして各行の最大幅を取得し、ヘッダーとコンテンツ テーブルの両方の各行の幅を設定します。

アクティビティとそのレイアウトは次のとおりです。

main.xml

主な活動

上記のコードは完全に機能します ( 期待される) が、AnysnTask を使用してサーバーからデータを取得し、後でテーブルにデータを追加すると、カスタム ビューの onLayout() が機能しなくなります。いくつかの番号をログアウトして、データの取得をシミュレートします。

したがって、onLayout() は、メイン UI スレッドから onCreate() メソッドに入れて appendRows() を呼び出した場合にのみ機能します。別の UI スレッドから (AsyncTask の onPostExecute() で) 呼び出すと、onLayout() が呼び出されます (いくつかのログを作成して確認しました) が、GUI には影響しません。私はinvalidate()、forceLayout()、requestLayout()を試しましたが、何も変わりません。違う

GUI を更新するメソッドを呼び出す必要があると思いますが、それが何かわかりません。

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

java - runOnUiThread が完了するまでタイマー タスクを待機させる方法

一定期間後に UI を更新する必要があるため、タイマー スケジュールを作成し、その中で runOnUiThread を呼び出しています。

「3」に達した後、タイマースレッドが「8」にジャンプし、その後UIスレッドが「4」から実行されるという問題があります。UIスレッドが「7」で作業を完了するまでタイマースレッドを待機させたいのですが、その後「8」に移動する必要があります。

サンプル出力