0

私のアプリでは、データをデータベース (SQLite) に保存しています。UI をブロックしたくないので、データを別のタスクに保存します

            await Task.Run(() => this.SaveTracks(books, filesCollection));

データを含む辞書から TextBox を取得します

TextBox tmpTextBox = parseData["title_" + i] as TextBox;

異なるタスクにないときはうまく機能しますが、Task.Run で設定すると、異なるスレッドで要素を呼び出すため、使用できないという例外が発生します。別のタスクでUIをブロックせず、メインスレッドのUI要素からデータを取得するにはどうすればよいですか?

4

2 に答える 2

3

2 つのオプション:

  • より大きな操作を分割して、ループ (ループがあると仮定します) が引き続き UI スレッドで実行されるようにしますが、個々の保存操作はバックグラウンドで個別のタスクになります。
  • タスクを作成する前に必要なすべての UI 情報を取得し、その情報を取得して、タスクが UI にアクセスする必要がないようにします。

どちらの方法でも結果は同じです。UI スレッド内の UI 要素にのみアクセスします。

于 2012-11-12T17:52:53.637 に答える
1

Task を開始する前に値を取得し、TextBox.Textその値を引数として渡します。

于 2012-11-12T17:53:32.693 に答える