Webサーバーのデータにアクセスする際にc#とデータベースを使用してアプリケーションを作成していますが、非常に遅く、データがロードされるまでフォームもハングアップします。最初にフォームとデータをロードする方法は?データから独立したUIを読み込む方法
1
A
答えて
3
これを解決する一般的な方法は、BackgroundWorker
クラスを使用することです。
public void InitBackgroundWorker()
{
backgroundWorker.DoWork += YourLongRunningMethod;
backgroundWorker.RunWorkerCompleted += UpdateTheWholeUi;
backgroundWorker.WorkerSupportsCancellation = true; // optional
// these are also optional
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.ProgressChanged += UpdateProgressBar;
}
// This could be in a button click, or simply on form load
if (!backgroundWorker.IsBusy)
{
backgroundWorker.RunWorkerAsync(); // Start doing work on background thread
}
// ...
private void YourLongRunningMethod(object sender, DoWorkEventArgs e)
{
var worker = sender as BackgroundWorker;
if(worker != null)
{
// Do work here...
// possibly in a loop (easier to do checks below if you do)
// Optionally check (while doing work):
if (worker.CancellationPending == true)
{
e.Cancel = true;
break; // If you were in a loop, you could break out of it here...
}
else
{
// Optionally update
worker.ReportProgress(somePercentageAsInt);
}
e.Result = resultFromCalculations; // Supports any object type...
}
}
private void UpdateProgressBar(object sender, ProgressChangedEventArgs e)
{
int percent = e.ProgressPercentage;
// Todo: Update UI
}
private void UpdateTheWholeUi(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// Todo: Update UI
}
else if (e.Error != null)
{
string errorMessage = e.Error.Message;
// Todo: Update UI
}
else
{
object result = e.Result;
// Todo: Cast the result to the correct object type,
// and update the UI
}
}
2
1
1
どのようなデータを使用しますか?
あなたはBackgroundWorkerのを使用することができますまたはいくつかのケースでは非同期メソッドがあります(あなたがwebservivceを呼び出した場合、たとえば)
2
をマルチスレッドはあなたのために懸命にある場合は、最初にそのデータの一部をロードすることができ、かつフォームにいくつかのボタンを配置して、ユーザーがデータの他の部分をフェッチできるようにします。これは一般にオンデマンドローディングと呼ばれ、ページングと呼ばれる実装時に呼び出されます。あなたが10000レコードの情報を持っていると想像してください。最初の100個のレコードをロードして、ユーザーが2番目の100個のレコードをロードできるようにします。サーバー上の長い操作や問題がオンデマンドローディングではない場合、唯一の方法はスレッドを使用することです。
関連する問題
- 1. テキストエリアにデータを読み込む方法
- 2. jsonパーサからデータを読み込む方法
- 3. Google BigQueryからGoogle Cloud Bigtableにデータを読み込む方法
- 4. Rubyでデータベースからデータを読み込む方法
- 5. テキストボックスからリストボックスにデータを読み込む方法は?
- 6. テキストファイルからデータを高速に読み込む方法
- 7. Cassandraテーブルからデータを読み込む方法
- 8. Tableau - URLから直接CSVデータを読み込む方法
- 9. AppDelegate.mからTableViewデータを読み込む方法は?
- 10. sqliteテーブルからデータを読み込む方法は?
- 11. Cassandra(DBeaver)からRにデータを読み込む方法
- 12. 外部JSONからのデータをカルーセルに読み込む方法
- 13. anglejsのデータベースからデータを読み込む方法C#
- 14. ajaxからzabutoカレンダープラグインにデータを読み込む方法は?
- 15. 配列からデータリストのデータを読み込む方法
- 16. テキストファイル/データファイルからデータを読み込む方法c#
- 17. OpenCV 3.1のファイルからSVMデータを読み込む方法は?
- 18. xmlからデータを読み込む
- 19. バーコードからデータを読み込む
- 20. MongoDBからデータを読み込む
- 21. ファイルからデータを読み込む
- 22. Firebaseデータベースからデータを読み込む
- 23. バイナリファイル(Java)からデータを読み込む?
- 24. ボタンをクリックして剣道UIからグラフを読み込む方法
- 25. テキストファイルから読み込むときにApache Ignite Cacheを読み込む方法
- 26. サーバから受信したxmlrpcからJavaオブジェクトを読み込み、読み込む方法
- 27. ファイルから読み込まれたデータに応じて、ダイナミックバッファサイズの大きなファイルを読み込む方法。
- 28. Python:オラクルからデータを読み込んでExcelに書き込む方法
- 29. 宣言されたディレクトリからファイルを読み込む方法
- 30. jsonファイルを読み込んでからgooglemapを読み込む方法
は、.NET 4では、あなたはまた、[TPL 'Task'クラス](http://stackoverflow.com/questions/3513432/task-parallel-library-replacement-for-backgroundworkerをチェックアウトすることができます) –