私はライブラリを管理するアプリケーションを作っています。現在、私は書籍の研究のためのコードを作っており、私は問題を見つけました。私は、残りの実行を処理するものに加えて、この研究を扱うスレッドを作成しました。私は自分自身に尋ねていました。スレッドが複数の方法を管理する可能性はありますか?そうであれば、スレッドの宣言に1つのメソッドしか入れることができないので、どのようにすればいいのですか。たとえば、ユーザーが検索ボタンを押したとき(menubox内)、私はアプリケーションを(私のresearchThreadを通して)URLに行き、goToUrl()メソッドを実行したいだけです。次に、ユーザーが検索ボタンを押すと(ブックのkeyWordを書き込んだ後)、別のメソッド(search()メソッド)を同じスレッドで実行します。すべての機能に対して数千のスレッドを作成したくないので(これが正しい解決策ではないと思うので)、どうすればこの状況を管理できますか?前もって感謝します。複数のメソッドを持つC#スレッド
答えて
スレッドの代わりにTaskクラスを使用してください。不必要にスレッドを使用しないようにする。タスクを操作すると、コードAsynchronousが実行されます。また、キーワードAsync and Awaitを使用することもできます。
public void Start()
{
//Create Task with parameter
Task search = new Task(() => new Action<int>(SomeSearchMethod)(4));
// Create Normal Task
Task download = new Task(SomeDownloadMethod);
// Create Task with Return value
Task<string> proccessString = Task.FromResult(SomeProcessing());
MessageBox.Show(proccessString.Result);
// Start Task
search.Start();
download.Start();
// Wait untill task finisht
search.Wait();
download.Wait();
/* or for both tasks*/
Task.WaitAll();
}
private void SomeDownloadMethod()
{
//logic
}
private void SomeSearchMethod(int value)
{
MessageBox.Show("Parameter Search" + value.ToString());
}
private string SomeProcessing()
{
return "Proccess";
}
ありがとうございます。しかし、メソッドにパラメータがある場合はどうしますか?私は特定のコードを使用しようとしましたが、別のスレッドで使用されているため、メソッドにアクセスできないという例外があります。 –
@AndreaFerrandoこれは最初の質問とは別の問題です。UIコントロールにアクセスする場合は、作成したスレッドでこれを行う必要があります。これはUIスレッドです。その話題についての情報はたくさんあります。 – khargoosh
@Andrea Ferrando復帰タスクとパラメータクラスの回答を更新しました –
- 1. 複数のスレッドを持つRubyのパフォーマンスと1つのスレッド
- 2. 複数のスレッドを持つMPI
- 3. 複数の背景スレッドを持つコアデータ
- 4. 複数のパラメータを持つスレッド
- 5. 複数のスレッドを持つJavaシングルプロセス
- 6. C++で複数の引数型を持つ仮想メソッド
- 7. 複数のNSStringを引数として持つObjective Cメソッド
- 8. 別のスレッドでオプションの引数を持つ複数の関数を持つオブジェクト
- 9. 複数のパラメータを持つ1つのメソッドまたは1つのパラメータを持つ複数のメソッド?
- 10. 複数のJSONオブジェクトを持つPOSTメソッド(目的C)
- 11. 複数のメソッドを持つLINQ式
- 12. 複数のパラメータを持つApiControllerメソッド
- 13. 複数のメソッドを持つディスパッチキュー? iPhone
- 14. スレッド内で実行可能な複数のメソッドを持つJavaクラス
- 15. 可変数のジェネリックパラメータを持つC#メソッド
- 16. 制限数を持つ複数のスレッドで関数を実行
- 17. Cで複数のスレッドを持つ構造体の値を増やす方法
- 18. 複数のスレッドで実行されているメソッドのスケールパフォーマンスC#
- 19. C#Mysqlと複数のスレッド?
- 20. 複数の列を持つWinFormsコンボボックス(C#)?
- 21. 複数のスレッドを持つアクセストークンを使用するJmeterのワークフロー
- 22. 複数のサービスまたは複数のスレッドを持つ単一サービス
- 23. 複数のスレッドを持つrabbitmqメッセージキューを消費する(Python Kombu)
- 24. 複数のループとスレッドを持つPythonの問題
- 25. 複数のスレッドを持つUIコンポーネントへのアクセス
- 26. 複数のスレッドを持つSQSキューからの読み取り
- 27. VB9複数のパラメータを持つ新しいスレッド
- 28. 複数のスレッド:長いトランザクションを持つ1、短いトランザクションと1
- 29. 複数のスレッドを持つ安全なメッセージキュー
- 30. "hidden"メソッドを持つC#クラス
[async/await](https://msdn.microsoft.com/en-us/library/mt674882.aspx)の機能だけを学び、スレッド管理について心配する必要はありません。非常に特殊な状況でのみスレッドを手動で処理しなければなりません。あなたが書いたものから、これは当てはまりません。 –