- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
923 :デフォルトの名無しさん (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 15:17:55.11 ID:hhClfuXq0 - 並列処理を行いたいんですがどうすればいいでしょうか?
しかも複数の並列処理で同一のコントロール(TextBox1.text) に同時に書き込めるようにしたいです(書き込む順番はきにしません) あとそれぞれの並列処理を無限ループで繰り返し処理を行いたいと 思っております。 どなたか教えてください。どうぞよろしくお願いします
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
933 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 17:08:45.84 ID:hhClfuXq0 - みなさんありがとうございます。
自分なりに調べて以下の通りつくってみました 「3秒まってコンソールに文字列を出力する」という処理を並列で動作させたかったのですが どうもそれぞれの処理が単体で実行されるだけで並列処理になっていないようです。 以下の処理を並列で実行できるようにするにはどうすればよろしいでしょうか? private async void button1_Click(object sender, EventArgs e) { while (true) { await Task.Run(() => Thread.Sleep(3000)); Console.WriteLine("タスク完了"); } }
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
937 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 17:33:48.36 ID:hhClfuXq0 - >>936
はいそうです 2個でも問題ありません。 簡単なサンプルとか頂ければ大変助かります 大変恐縮ですがどうぞよろしくお願い致します
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
939 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 17:52:32.66 ID:hhClfuXq0 - >>938
そうなんですね。ご指摘ありがとうございます。 ただ私の想定としては、「3秒待って出力」という処理を 複数同時に開始したいと思っておりました ですがコンソールに出力されるタイミングは3秒おきに1処理分しか 出力されず、非同期処理と変わらない処理となっているような気がします 上で示したサンプルがわかりづらくて申し訳ありませんが タスクは2個でも3個でも同時並列で処理できれば問題ありません 大変恐縮ですがご教示頂ければと思います
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
941 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 18:29:36.15 ID:hhClfuXq0 - >>940
ありがとうございます! ちなみにテキストボックスなどに内容を出力することって出来ますでしょうか? これらの処理をりようして TextBox1.Textに内容を出力する処理をそれぞれのタスクに追加すると エラーになってしまうようです。 お手数おかけしますがよろしくおねがいします。
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
943 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 18:41:21.02 ID:hhClfuXq0 - これだとやっぱり3秒毎に1処理実行されるだけなんですね・・・
async Task<string> TaskTest() { await Task.Delay(3000); return "a"; } private async void button1_Click(object sender, EventArgs e) { while (true) { TextBox1.Text += await TaskTest(); Application.DoEvents(); } }
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
944 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 18:51:54.77 ID:hhClfuXq0 - >>942
ありがとうございます。 ただやっぱり並列にはなりませんでした・・・ なにがまちがってるんでしょうか・・・? while (true) { await Task.Factory.StartNew(() => { Invoke((MethodInvoker)(() => { Thread.Sleep(3000); TextBox1.Text += "a"; })); }); }
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
946 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 19:13:46.70 ID:hhClfuXq0 - ありがとうございました!大変助かりました!
お手数おかけして申し訳ありませんでした
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
947 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 20:17:57.50 ID:hhClfuXq0 - >>945
おかげさまで仕事がはかどりました 改めてありがとうございました。 ただ、ソースをよく読んでみると Parallel.Forというのがあるので Task使わなくても問題なさそうですね (C#歴は1ヶ月程度なので違ってるかもしれませんが)
|
- ふらっと C#,C♯,C#(初心者用) Part125 [無断転載禁止]©2ch.net
950 :923 (ワッチョイ e33c-IeCC)[]:2016/12/24(土) 20:51:06.97 ID:hhClfuXq0 - なるほど。ありがとうございました!
|