「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part134
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f9a-KsIq)
2017/11/29(水) 19:23:58.05ID:GNLsbK4F048デフォルトの名無しさん (アウアウウー Sa67-fOQO)
2017/12/22(金) 06:19:42.32ID:agnD/jLFa49デフォルトの名無しさん (ワッチョイ 6302-+TNz)
2017/12/22(金) 09:45:16.77ID:Vx5ddxy90 ワードサラダボーイがいないスレ
50デフォルトの名無しさん (ガックシ 067f-Iw9I)
2017/12/22(金) 09:53:06.84ID:8f8y8qIA6 それは何ですか?
51デフォルトの名無しさん (ワッチョイ 9306-buzn)
2017/12/22(金) 09:55:25.36ID:oR3DRk2W0 会計システムはクラサバが最低限の要件なので、計算はDBでやるからクラス分けなど何の役にも立たないし却って邪魔だ
彼はクラサバと無縁なスタンドアローンの世界に住んでいるのかもしれんね
彼はクラサバと無縁なスタンドアローンの世界に住んでいるのかもしれんね
52デフォルトの名無しさん (ブーイモ MM27-bebx)
2017/12/22(金) 10:08:25.66ID:2CqGXpCvM スタンドアロンだとして、どういうデータ設計したら費用項目ごとにクラスができるんだろうね
日付, 費用種別コード, 金額
まさかこんなタプルで管理してるんだろうか
日付, 費用種別コード, 金額
まさかこんなタプルで管理してるんだろうか
53デフォルトの名無しさん (ワッチョイ ffb3-6aYH)
2017/12/22(金) 10:17:07.48ID:sp7ymsVp0 自称上級者様ご降臨〜 w
54デフォルトの名無しさん (ブーイモ MM27-vkjg)
2017/12/22(金) 10:23:52.41ID:lyRs/gAjM そ、ギョーミーな戦場ではオブジェクト指向などと言う玩具の武器は役に立たない
55デフォルトの名無しさん (ワッチョイ ffd2-Xao7)
2017/12/22(金) 10:26:29.36ID:xQ825djR0 >>54
いまだにこんな老害がいるからね
いまだにこんな老害がいるからね
56デフォルトの名無しさん (ブーイモ MM27-vkjg)
2017/12/22(金) 10:32:48.81ID:lyRs/gAjM 何をいっておる、LinqもLambdaも戦場の小火器として使えるが腐ったオブジェクト指向など使えぬわ
57デフォルトの名無しさん (ワッチョイ 634b-Iw9I)
2017/12/22(金) 10:56:00.35ID:pMoYdCae0 関数型がいいって言いたいの?
58デフォルトの名無しさん (ブーイモ MM27-vkjg)
2017/12/22(金) 10:59:19.90ID:lyRs/gAjM 腐ったオブジェクト指向脳で単純なものを複雑にするヤツが大嫌いなだけ
59デフォルトの名無しさん (ワッチョイ cfe8-7LW1)
2017/12/22(金) 11:05:05.39ID:oEPXElot0 結局個人的感情か
毎回レスの最後に ※個人の感想です って付けとけよ
毎回レスの最後に ※個人の感想です って付けとけよ
60デフォルトの名無しさん (アウアウウー Sa67-fOQO)
2017/12/22(金) 11:10:42.54ID:cOtumJc5a61デフォルトの名無しさん (ブーイモ MM27-vkjg)
2017/12/22(金) 11:11:28.05ID:lyRs/gAjM オブジェクト指向は過去の遺物
62デフォルトの名無しさん (ワッチョイ 6f9e-rt3g)
2017/12/22(金) 12:24:49.48ID:4JyKqZfo0 >>61
じゃあ今流行りは何?
じゃあ今流行りは何?
63デフォルトの名無しさん (ガックシ 067f-Iw9I)
2017/12/22(金) 12:29:43.88ID:E5w5T/306 大きなスケール→ガチガチのオブジェクト指向
小さなスケール→手続き型、関数型
小さなスケール→手続き型、関数型
64デフォルトの名無しさん (ワントンキン MM9f-OPDc)
2017/12/22(金) 12:35:16.71ID:3WJNmOAXM 名前、住所、電話番号、みたいなデータがあったとして、
Aさんの住所を参照するのに、["A"]的なアクセスするやつ、なかったでしたっけ?
Aさんの住所を参照するのに、["A"]的なアクセスするやつ、なかったでしたっけ?
65デフォルトの名無しさん (ワッチョイ ffb3-6aYH)
2017/12/22(金) 12:41:08.55ID:sp7ymsVp0 >>64
Dictionaryでいいんじゃね?
Dictionaryでいいんじゃね?
66デフォルトの名無しさん (ガックシ 067f-Iw9I)
2017/12/22(金) 12:47:31.71ID:E5w5T/30667デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/22(金) 13:06:22.96ID:4dlvq16La >>64
そういう仕組みはインデクサという
そういう仕組みはインデクサという
68デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/22(金) 19:32:54.21ID:w6Zu6k6M0 ボタンを押すと処理を緊急停止するプログラムを作りたいのですがどのような方法がありますでしょうか?
69デフォルトの名無しさん (ワッチョイ cf9a-RBuR)
2017/12/22(金) 19:39:03.10ID:Ta4DCaCP070デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/22(金) 19:46:47.55ID:w6Zu6k6M0 今はbackgroundWorkerで処理を実行しているのですが
CancelAsync()で停止させても
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
というコードに到達するまで停止しないので停止までに時間があるのを改善したいです
このコードをたくさん差し込むしかないのでしょうか?
CancelAsync()で停止させても
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
というコードに到達するまで停止しないので停止までに時間があるのを改善したいです
このコードをたくさん差し込むしかないのでしょうか?
71デフォルトの名無しさん (ワッチョイ cf9a-RBuR)
2017/12/22(金) 19:51:25.63ID:Ta4DCaCP0 >>70
親フォームでkillしたらbackgroundWorkerも止まるんじゃないの?
親フォームでkillしたらbackgroundWorkerも止まるんじゃないの?
72デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/22(金) 19:53:12.14ID:w6Zu6k6M0 どういうことでしょう
あらゆる処理をForm1に書いていまして
killの仕方がわからないです
あらゆる処理をForm1に書いていまして
killの仕方がわからないです
73デフォルトの名無しさん (ワッチョイ cf9a-RBuR)
2017/12/22(金) 19:59:46.81ID:Ta4DCaCP0 backgroundWorker以外の処理は生かしておきたいって話なら分からないな
>>70
というかキャンセル用のフラグ作って止めなきゃならないところに停止処理差し込むのがそんな大変だとも思えないけど
楽したいってのはわかるけど、それは他の人に聞いて
>>70
というかキャンセル用のフラグ作って止めなきゃならないところに停止処理差し込むのがそんな大変だとも思えないけど
楽したいってのはわかるけど、それは他の人に聞いて
74デフォルトの名無しさん (ワッチョイ c3b3-QXzE)
2017/12/22(金) 20:00:08.26ID:W8xzYPPc0 >このコードをたくさん差し込むしかないのでしょうか?
>あらゆる処理をForm1に書いていまして
まず、設計の仕方を覚えた方が良い
>あらゆる処理をForm1に書いていまして
まず、設計の仕方を覚えた方が良い
75デフォルトの名無しさん (ワッチョイ ff19-vkjg)
2017/12/22(金) 20:10:01.65ID:HDUqSz1r0 >>68
Application.Exit();
Application.Exit();
76デフォルトの名無しさん (ワッチョイ 03c9-buzn)
2017/12/22(金) 20:31:26.17ID:kA+szNzE0 自作プログラムでSemaphoreFullExceptionが発生したんだけど、これってSemaphore使って無くてもTaskやawait使っていれば発生するようなもんなの?
77デフォルトの名無しさん (ブーイモ MM27-bebx)
2017/12/22(金) 20:34:55.44ID:2CqGXpCvM なぜスタックトレースを見ないのか
78デフォルトの名無しさん (ワッチョイ 03c9-buzn)
2017/12/22(金) 20:39:08.36ID:kA+szNzE079デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/22(金) 20:40:07.26ID:4dlvq16La まあ普通に使い方間違えてバグってんでしょ
80デフォルトの名無しさん (アウアウエー Sadf-HQem)
2017/12/22(金) 20:47:43.11ID:G9MI+OvKa81デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/22(金) 21:17:12.68ID:w6Zu6k6M0 >>80
それ自分です!
それ自分です!
82デフォルトの名無しさん (ワッチョイ cf81-+TNz)
2017/12/22(金) 21:18:00.45ID:UrkxRoCQ0 二度も同じことを聞くんじゃない
83デフォルトの名無しさん (アウアウエー Sadf-HQem)
2017/12/22(金) 21:27:30.25ID:G9MI+OvKa >>81
マジすかw
マジすかw
84デフォルトの名無しさん (ワッチョイ c3b3-QXzE)
2017/12/22(金) 21:30:54.07ID:W8xzYPPc0 わろす
85デフォルトの名無しさん (ワッチョイ ffd2-VulL)
2017/12/22(金) 21:46:10.24ID:Kw0QQsKg0 潔くてすき
86デフォルトの名無しさん (ワッチョイ 6f9e-rt3g)
2017/12/22(金) 22:28:43.29ID:4JyKqZfo0 backgroundworkerとtaskの違いは何よ?
87デフォルトの名無しさん (ワッチョイ 6f76-5z/u)
2017/12/22(金) 22:41:34.49ID:Iyc/J/sJ0 BackgroundWorkerはレガシー
88デフォルトの名無しさん (ワッチョイ 138d-6js8)
2017/12/22(金) 23:26:00.99ID:vOV0CWVO0 >>81
ここで2回も聞くぐらいなら
やりたいことを英語にしてGoogleで検索した方がいいよ
ここにいる人が知らないか教えないだけで
やり方はちゃんとある
ポーリングとか今どきダサすぎるからやめとけ
ここで2回も聞くぐらいなら
やりたいことを英語にしてGoogleで検索した方がいいよ
ここにいる人が知らないか教えないだけで
やり方はちゃんとある
ポーリングとか今どきダサすぎるからやめとけ
89デフォルトの名無しさん (アウアウエー Sadf-HQem)
2017/12/22(金) 23:41:50.51ID:G9MI+OvKa いやいやないからアホかw
あるなら言ってみ。まあ無理せんでよろしい。
生スレッドは強制終了できるが普通は推奨されない。
あるなら言ってみ。まあ無理せんでよろしい。
生スレッドは強制終了できるが普通は推奨されない。
90デフォルトの名無しさん (アウアウエー Sadf-HQem)
2017/12/22(金) 23:43:22.66ID:G9MI+OvKa そもそも外から強制的に止めるって発想に疑問を持たない時点でセンスがない
91デフォルトの名無しさん (ワッチョイ 6f7f-HrVW)
2017/12/22(金) 23:43:31.65ID:teKS3rfy092デフォルトの名無しさん (ワッチョイ 6f7f-HrVW)
2017/12/22(金) 23:48:36.08ID:teKS3rfy0 CancellationToken.ThrowIfCancellationRequested()使うけど、これもポーリングだしな。
93デフォルトの名無しさん (ワッチョイ 9306-buzn)
2017/12/22(金) 23:54:28.61ID:oR3DRk2W094デフォルトの名無しさん (ワッチョイ 2323-bebx)
2017/12/23(土) 01:24:21.53ID:ti8BrBts0 スリープで時間かかってたり繰り返しスリープ入れてるなら
Interruptを使って無理矢理中断させることもできる
Interruptを使って無理矢理中断させることもできる
95デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/23(土) 08:12:59.96ID:FPRjmoIB0 >>70
Async が付いている関数は、非同期処理だから、コンテキストが異なる。
だから、処理が実行される順番が確定しない
Sync なら同期処理だから、順番が1つに決まる。
つまり、ソースコードの上から下へ、順に実行される
コンテキストが異なるもの同士が通信するには、プロセス間通信(IPC)を使う。
基本的には、相手のキューに、投入することしかできない
1. 依頼する。A プロセス → OS → B プロセス
2. B が届いたメッセージを処理する
3. 返事する。B プロセス → OS → A プロセス
これを同期処理にすると、1〜3 の処理中、
アプリが止まる(ストール)から、GUI では嫌われる。
50ms 以上掛かる処理は、非同期処理にすべき
逆に、CUI では同期処理にして、コンソールが止まる
Async が付いている関数は、非同期処理だから、コンテキストが異なる。
だから、処理が実行される順番が確定しない
Sync なら同期処理だから、順番が1つに決まる。
つまり、ソースコードの上から下へ、順に実行される
コンテキストが異なるもの同士が通信するには、プロセス間通信(IPC)を使う。
基本的には、相手のキューに、投入することしかできない
1. 依頼する。A プロセス → OS → B プロセス
2. B が届いたメッセージを処理する
3. 返事する。B プロセス → OS → A プロセス
これを同期処理にすると、1〜3 の処理中、
アプリが止まる(ストール)から、GUI では嫌われる。
50ms 以上掛かる処理は、非同期処理にすべき
逆に、CUI では同期処理にして、コンソールが止まる
96デフォルトの名無しさん (ワッチョイ cf81-+TNz)
2017/12/23(土) 08:22:18.86ID:7ZChdQbJ0 このどことなくズレたレスをつける句読点過剰くんってのは、やはり糖質なのだろうか?
97デフォルトの名無しさん (ワッチョイ 2323-bebx)
2017/12/23(土) 08:23:33.88ID:ti8BrBts0 句読点箇条君はすぐわかるな
そして必ず間違ってる
スレッドが違うだけならIPCなんか使う必要ない
普通は単にメモリを共有する
FormsのBeginInvokeなどで使われているSynchronizationContextのキューも普通にメモリを共有してるだけだ
そして必ず間違ってる
スレッドが違うだけならIPCなんか使う必要ない
普通は単にメモリを共有する
FormsのBeginInvokeなどで使われているSynchronizationContextのキューも普通にメモリを共有してるだけだ
9895 (ワッチョイ cf80-fDvV)
2017/12/23(土) 08:24:22.31ID:FPRjmoIB0 つまり、1〜3 は、OS が行っている事だから、何もできる事が無い。
OS レスのマイコンとかなら、自分でプログラミングするけど
何かをしようとしても、OS がCPU のタイムスライス、
プロセスの優先度・実行順番を決めているから、何もできない
それがOS。
OSレスなら、それらを自分でプログラミングしないといけないから、無理
OS レスのマイコンとかなら、自分でプログラミングするけど
何かをしようとしても、OS がCPU のタイムスライス、
プロセスの優先度・実行順番を決めているから、何もできない
それがOS。
OSレスなら、それらを自分でプログラミングしないといけないから、無理
99デフォルトの名無しさん (ワッチョイ 2323-bebx)
2017/12/23(土) 08:45:11.75ID:ti8BrBts0 このアスペは>>97も理解してないんだと思うけど、初心者スレだから改めて否定しておく
スレッドが違うだけなら、>>95の123は正しくはこう
1. スレッドAがジョブの情報Jをメモリ上のキューQに登録する
2. スレッドBはQからJを取り出し、Jの内容に従って処理を実行する
3. Bは処理結果RをキューQ'に登録する
4. AはQ'からRを取り出し、後続処理を実行する
AとBの間で普通にQやQ'を直接共有してるだけで、OSなんか全く関係ない
そもそもマルチスレッドに限った話でもなく、例えば、ゲーム内で2つのキャラクターの間でやり取りしたい、
でも直接メソッドを呼ぶと長くなるとか、間にウェイトを入れたいとかで一旦処理をゲームループに戻したい、なんて時にも使える
スレッドが違うだけなら、>>95の123は正しくはこう
1. スレッドAがジョブの情報Jをメモリ上のキューQに登録する
2. スレッドBはQからJを取り出し、Jの内容に従って処理を実行する
3. Bは処理結果RをキューQ'に登録する
4. AはQ'からRを取り出し、後続処理を実行する
AとBの間で普通にQやQ'を直接共有してるだけで、OSなんか全く関係ない
そもそもマルチスレッドに限った話でもなく、例えば、ゲーム内で2つのキャラクターの間でやり取りしたい、
でも直接メソッドを呼ぶと長くなるとか、間にウェイトを入れたいとかで一旦処理をゲームループに戻したい、なんて時にも使える
100デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
2017/12/23(土) 10:27:32.58ID:AW7swrGi0 オレオレキューなんぞつかわずにTaskを使え
バックグラウンドといえどインプロセスで長大な処理を発生させるな
そういうのはジョブ管理サービスを使えHangfireとかな
バックグラウンドといえどインプロセスで長大な処理を発生させるな
そういうのはジョブ管理サービスを使えHangfireとかな
101デフォルトの名無しさん (ワッチョイ cf81-+TNz)
2017/12/23(土) 11:10:58.80ID:7ZChdQbJ0 今回はTaskかどうかは問題ではなく
「BackgroundWorkerの処理を中断する方法で、ポーリングより面倒くさくない方法があったら教えて」
なので
Thread.Abortでも使え
「BackgroundWorkerの処理を中断する方法で、ポーリングより面倒くさくない方法があったら教えて」
なので
Thread.Abortでも使え
102デフォルトの名無しさん (ワッチョイ cf81-+TNz)
2017/12/23(土) 11:12:40.52ID:7ZChdQbJ0 Task大好きッ子もなかなかスレの流れ読んでねえよな
103デフォルトの名無しさん (ワッチョイ 6325-Iw9I)
2017/12/23(土) 11:29:15.39ID:m8DTIJvo0 asyncつけてるとエラー発生したらデバッグの実行位置の矢印の動きがおかしくなる
104デフォルトの名無しさん (オイコラミネオ MMff-HtKy)
2017/12/23(土) 11:42:39.57ID:A76YiAtwM RunWorkerCompletedでイベントオブジェクトのフラグをいじり、それを待機とかだめ?
105デフォルトの名無しさん (ワッチョイ 8f33-9Igo)
2017/12/23(土) 12:51:18.15ID:kNBZIa630 Task関連は7標準のランタイムだと使えないからいまだにBackgroundWorker使ってる
まあ他ソフトの事情で.NET 4以降一切入れないってことはないんだけどさ
まあ他ソフトの事情で.NET 4以降一切入れないってことはないんだけどさ
106デフォルトの名無しさん (ワッチョイ 8f33-9Igo)
2017/12/23(土) 13:21:31.65ID:kNBZIa630 自分のBackgroundWorker使ってるソース見てみると、
処理単位でループして1処理終った後と、長い処理の途中でwk.CancellationPending == trueで抜けるか判定してる
イベント待ちはタイムアウト設定して一旦抜ける
という感じだった
Task使っても同じだろう
処理単位でループして1処理終った後と、長い処理の途中でwk.CancellationPending == trueで抜けるか判定してる
イベント待ちはタイムアウト設定して一旦抜ける
という感じだった
Task使っても同じだろう
107デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 13:24:28.81ID:eJOJ1LQ5M @Abortはしたくない
Aメインループのフラグチェックでは頻度が足りない
Bでもフラグチェック処理を書き足すのは嫌だ
要件はこれでいいか?
真面目に考えるとメタプログラミングの領域だな
チェック頻度とパフォーマンスのトレードオフも考えなきゃならん
初心者スレ民の実力では難しいんじゃないか?
Aメインループのフラグチェックでは頻度が足りない
Bでもフラグチェック処理を書き足すのは嫌だ
要件はこれでいいか?
真面目に考えるとメタプログラミングの領域だな
チェック頻度とパフォーマンスのトレードオフも考えなきゃならん
初心者スレ民の実力では難しいんじゃないか?
108デフォルトの名無しさん (ワッチョイ 03c9-buzn)
2017/12/23(土) 13:34:41.82ID:ktMndlca0 >>107
この頻度が足りないって、メインループの記述が冗長とか別の理由ありそうな気がするわ
この頻度が足りないって、メインループの記述が冗長とか別の理由ありそうな気がするわ
109デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 13:41:27.68ID:eJOJ1LQ5M クッソ長いループ書いてんだろうな
マルチスレッドより先に基本的なコード整理術を覚えたほうがいい
マルチスレッドより先に基本的なコード整理術を覚えたほうがいい
110デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/23(土) 13:46:44.49ID:suzKftpB0 たくさんレスありがとうございます。
わからない言葉がたくさんあるので調べてまた来ます。
わからない言葉がたくさんあるので調べてまた来ます。
111デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/23(土) 14:02:46.78ID:suzKftpB0 キーボードをa,b,c,dと順番に5秒置きに押していくメソッドをBackgroundWorker内で無限ループさせていて
キャンセルボタンを押したときすぐに止まって欲しいのですが必ずdまで押されてから止まるので困っているという感じです
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
play_abcd();
if (backgroundWorker1.CancellationPending)
{
// イベントをキャンセルする
e.Cancel = true;
return;
}
}
}
キャンセルボタンを押したときすぐに止まって欲しいのですが必ずdまで押されてから止まるので困っているという感じです
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
play_abcd();
if (backgroundWorker1.CancellationPending)
{
// イベントをキャンセルする
e.Cancel = true;
return;
}
}
}
112デフォルトの名無しさん (ワッチョイ 6316-+TNz)
2017/12/23(土) 14:10:55.29ID:saCRURuP0 そりゃそうだろって反応しか返ってこないと思う
113デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
2017/12/23(土) 14:19:46.07ID:suzKftpB0 キーボードをa,b,c,dと順番に5秒置きに押していってすぐ途中で止められるプログラムを作るには
どういう方法があるんでしょうか?BackgroundWorkerにはこだわりません。
play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあってBackgroundWorkerを使うと
プログラム実行中でもきちんと表示されるのでBackgroundWorkerを使っています
どういう方法があるんでしょうか?BackgroundWorkerにはこだわりません。
play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあってBackgroundWorkerを使うと
プログラム実行中でもきちんと表示されるのでBackgroundWorkerを使っています
114デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
2017/12/23(土) 14:42:50.03ID:AW7swrGi0 private IEnumerable<Action> GetJobs(int sleepMilliseconds) {
/**/var buttons = new [] { btnA, btnB, btnC, btnD };
/**/while (true) {
/**//**/foreach (var button in buttons) {
/**//**//**/yield return () => button.Click();
/**//**//**/yield return () => Thread.Sleep(sleepMilliseconds);
/**//**/}
/**/}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
/**/while (true) {
/**//**/foreach (var job in GetJobs()) {
/**//**//**/job();
/**//**//**/if (backgroundWorker1.CancellationPending) {
/**//**//**//**/e.Cancel = true;
/**//**//**//**/return;
/**//**//**/}
/**//**/}
/**/}
}
/**/var buttons = new [] { btnA, btnB, btnC, btnD };
/**/while (true) {
/**//**/foreach (var button in buttons) {
/**//**//**/yield return () => button.Click();
/**//**//**/yield return () => Thread.Sleep(sleepMilliseconds);
/**//**/}
/**/}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
/**/while (true) {
/**//**/foreach (var job in GetJobs()) {
/**//**//**/job();
/**//**//**/if (backgroundWorker1.CancellationPending) {
/**//**//**//**/e.Cancel = true;
/**//**//**//**/return;
/**//**//**/}
/**//**/}
/**/}
}
115デフォルトの名無しさん (ワッチョイ c3bb-+TNz)
2017/12/23(土) 14:43:52.99ID:7NR5j+Xf0 play_aとplay_bとplay_cとplay_dを分ける
デリゲート配列にしてforeachで回せばチェックは一カ所で済む
デリゲート配列にしてforeachで回せばチェックは一カ所で済む
116デフォルトの名無しさん (ワッチョイ f381-7LW1)
2017/12/23(土) 14:47:49.51ID:97OmZxF20 メソッドの名前がメンタルに悪い
117デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 14:57:49.84ID:eJOJ1LQ5M 5chはいつになったらGFM対応するんだ
118デフォルトの名無しさん (ワッチョイ 9306-buzn)
2017/12/23(土) 15:46:06.35ID:KAucFFwx0 BackgroundWorkerじゃなくてタイマー使うべきだよ
119デフォルトの名無しさん (アウアウエー Sadf-HQem)
2017/12/23(土) 16:17:28.04ID:Nxx0V5wTa >>111
>>113
>play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあって
ってことはたぶんplay_abcdの中でbackgroundWorker1.ReportProgressを呼んでいる、
つまりbackgroundWorker1を参照できる場所にplay_abcdはあるんだから、
素直にCancellationPendingをポーリングするだけじゃないの?
本当はよくないと思うけどねこういうの
本当は前も書いたみたいにplay_abcdのシグネチャを
void play_abcd(Func<bool> canceled){...}
とかにして、呼び出すときに、
play_abcd(() => backgroundWorker1.CancellationPending);
がいいと思う
っていうか、そもそも
>キーボードをa,b,c,dと順番に5秒置きに押していくメソッド
をビジーループで実弁する必要本当にある?w
それ、タイマーで十分実現できると思うんだけど...
>>113
>play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあって
ってことはたぶんplay_abcdの中でbackgroundWorker1.ReportProgressを呼んでいる、
つまりbackgroundWorker1を参照できる場所にplay_abcdはあるんだから、
素直にCancellationPendingをポーリングするだけじゃないの?
本当はよくないと思うけどねこういうの
本当は前も書いたみたいにplay_abcdのシグネチャを
void play_abcd(Func<bool> canceled){...}
とかにして、呼び出すときに、
play_abcd(() => backgroundWorker1.CancellationPending);
がいいと思う
っていうか、そもそも
>キーボードをa,b,c,dと順番に5秒置きに押していくメソッド
をビジーループで実弁する必要本当にある?w
それ、タイマーで十分実現できると思うんだけど...
120デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 16:39:39.92ID:eJOJ1LQ5M タイマーとかめんどくさいだけだろ
121デフォルトの名無しさん (ワッチョイ 3317-7LW1)
2017/12/23(土) 16:58:02.75ID:oBD8VcBx0 BackgroundWorkerのほうが実装が綺麗になるよね
122デフォルトの名無しさん (ワッチョイ a375-Iw9I)
2017/12/23(土) 17:54:59.64ID:433UoltE0123デフォルトの名無しさん (ワッチョイ 6f9e-rt3g)
2017/12/23(土) 18:17:28.09ID:MO+dM8J20 >>121
どう言う理由で?
どう言う理由で?
124デフォルトの名無しさん (ワッチョイ ff06-buzn)
2017/12/23(土) 18:52:05.60ID:vwLvtl/C0 タイマーなら、キャンセルでタイマー止めればそれで終わりでしょ
実装が見苦しいようには見えんね
実装が見苦しいようには見えんね
125デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
2017/12/23(土) 18:57:13.19ID:AW7swrGi0 ためしに書いてみてよ
126デフォルトの名無しさん (ワッチョイ ff06-buzn)
2017/12/23(土) 19:41:20.88ID:vwLvtl/C0127デフォルトの名無しさん (ワッチョイ 8f9f-9TLc)
2017/12/23(土) 19:47:21.47ID:PvZdk9430 >>113
そもそも、なんで提示したコードがdまで実行しないとキャンセルされないか理解できてる?
理解出来てればBackgroundWorkerを別の手法に変えても意味がないことは分かると思うんだけど
そもそも、なんで提示したコードがdまで実行しないとキャンセルされないか理解できてる?
理解出来てればBackgroundWorkerを別の手法に変えても意味がないことは分かると思うんだけど
128デフォルトの名無しさん (ワッチョイ 6f9d-FmKA)
2017/12/23(土) 20:47:59.87ID:afY4COyy0129デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/23(土) 21:18:44.75ID:XrEDpSoU0 バックグラウンドなんちゃらってなんだ?
タイマーでいいじゃん
タイマーでいいじゃん
130デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 21:19:57.12ID:eJOJ1LQ5M131デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/23(土) 21:21:13.92ID:XrEDpSoU0132デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/23(土) 21:26:21.49ID:XrEDpSoU0 タイマーでもTickイベントを1秒おきにすればその実装できるし
while+sleepとかアホすぎるわ
while+sleepとかアホすぎるわ
133デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 21:29:55.10ID:eJOJ1LQ5M >>131
推測でしかないが質問者のやりたい事ってAPIが提供されてないアプリのGUIオートメーションだと思うんだ
やってみるとわかるけど、等間隔キー入力の繰り返し、のような単調な操作のほうがむしろレアケースだよ
推測でしかないが質問者のやりたい事ってAPIが提供されてないアプリのGUIオートメーションだと思うんだ
やってみるとわかるけど、等間隔キー入力の繰り返し、のような単調な操作のほうがむしろレアケースだよ
134デフォルトの名無しさん (ワッチョイ 83c3-v9+e)
2017/12/23(土) 21:31:02.84ID:YgD70bUC0 態々スレッド分ける様な処理じゃないのは間違いない
135デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/23(土) 21:33:38.79ID:XrEDpSoU0 バックグラウンドワーカーとかタイマーじゃなくてTask.Runの中にwhileとsleepとカウンタを全部ねじ込んだほうががまとまりがいいな
136デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/23(土) 21:37:57.32ID:XrEDpSoU0 やっぱなんでもない
俺のレスはスルーで
俺のレスはスルーで
137デフォルトの名無しさん (ワッチョイ 3317-7LW1)
2017/12/23(土) 21:39:10.88ID:oBD8VcBx0 相変わらず質問者抜きの議論が大好きだなお前らは
138デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 21:42:59.27ID:eJOJ1LQ5M ちなみに>>114の実装ならマクロが多少複雑化しても可読性がそこそこ良いのでオススメ
IEnumerable<Action> GetJobs() {
while (true) {
yield return () => SendKeys("A");
yield return () => Sleep(5000);
yield return () => SendKeys("B");
yield return () => Sleep(2000);
yield return () => SendKeys("ハゲ");
yield return () => Sleep(3000);
yield return () => SendKeys("C");
yield return () => Sleep(5000);
yield return () => SendKeys("D");
yield return () => Sleep(5000);
}
この考え方を進化させてJobsをActionの列挙ではなく式木にしたら記述が楽そうだな、とかインタープリターパターンで実装したらユーザー目線で便利そうだな、とか発展していく
IEnumerable<Action> GetJobs() {
while (true) {
yield return () => SendKeys("A");
yield return () => Sleep(5000);
yield return () => SendKeys("B");
yield return () => Sleep(2000);
yield return () => SendKeys("ハゲ");
yield return () => Sleep(3000);
yield return () => SendKeys("C");
yield return () => Sleep(5000);
yield return () => SendKeys("D");
yield return () => Sleep(5000);
}
この考え方を進化させてJobsをActionの列挙ではなく式木にしたら記述が楽そうだな、とかインタープリターパターンで実装したらユーザー目線で便利そうだな、とか発展していく
139デフォルトの名無しさん (ワッチョイ cf81-+TNz)
2017/12/23(土) 22:13:16.73ID:7ZChdQbJ0 百万年発展し続けてろバーカ
140デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 22:20:22.98ID:eJOJ1LQ5M 初心者用スレというか子供用スレだったのか
141デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/23(土) 22:36:15.16ID:FPRjmoIB0 非同期処理は、コンテキストが異なるから、処理の実行順番は確定しない
ビジーループするのは、もってのほか。
ビジーループは同期処理
非同期処理は、コールバック関数を使う。
相手の処理が終わったら、コールバック関数を呼んでもらう
コンテキストが異なるものは、マルチスレッド・マルチプロセスでも、
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから、
プログラマーができる事は無い
複数のスレッド・プロセスは、無関係に同時に、異なるCPU で動く(並行処理)から、
処理時間が短くなるが、処理の実行順番は、OS が決めるから確定しない
同期処理とは異なる
ビジーループするのは、もってのほか。
ビジーループは同期処理
非同期処理は、コールバック関数を使う。
相手の処理が終わったら、コールバック関数を呼んでもらう
コンテキストが異なるものは、マルチスレッド・マルチプロセスでも、
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから、
プログラマーができる事は無い
複数のスレッド・プロセスは、無関係に同時に、異なるCPU で動く(並行処理)から、
処理時間が短くなるが、処理の実行順番は、OS が決めるから確定しない
同期処理とは異なる
142デフォルトの名無しさん (ワッチョイ ff06-buzn)
2017/12/23(土) 23:00:34.49ID:vwLvtl/C0 一番の問題は、最悪5秒戻ってこないポンコツってことだと思う
143デフォルトの名無しさん (ワンミングク MM9f-Px6h)
2017/12/23(土) 23:04:50.10ID:eJOJ1LQ5M 結論はやっぱりTask使えって事だな
144デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/23(土) 23:31:47.43ID:FPRjmoIB0 そもそも、ビジーループ(ポーリング)しても意味がない
例えば、スレッドA から、10ms 毎にポーリングしても、
スレッドB の処理が10秒掛かれば、千回のポーリングは無意味
ポーリングしても、異なるスレッドの処理を速めることはできない。
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから
プログラマーにできることは、コールバック関数を登録することだけ。
スレッドBの処理が終われば、それを呼んでもらうだけ
例えば、スレッドA から、10ms 毎にポーリングしても、
スレッドB の処理が10秒掛かれば、千回のポーリングは無意味
ポーリングしても、異なるスレッドの処理を速めることはできない。
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから
プログラマーにできることは、コールバック関数を登録することだけ。
スレッドBの処理が終われば、それを呼んでもらうだけ
145デフォルトの名無しさん (ワッチョイ 6302-+TNz)
2017/12/23(土) 23:34:38.24ID:oRgQl+h80 鈴虫がまだ何か言ってるな
鈴虫は鈴虫の学校にでも通ってな
鈴虫は鈴虫の学校にでも通ってな
146デフォルトの名無しさん (ワッチョイ 8f33-9Igo)
2017/12/24(日) 02:28:49.95ID:BEcZgz8A0 フリーズしない/しても問題ないUIにすればいいだけだと思うが
147デフォルトの名無しさん (ワッチョイ 8f9f-mmj6)
2017/12/24(日) 07:08:55.16ID:kiz3NtEj0 play_abcdって雑な作りから察すると5秒おきってのはaの動作が終わってから5秒なんじゃね?
本当に5秒感覚でキーを押したいならタイマーがいいけど、各動作を5秒感覚で実行したいならタイマーは使わない方がいいかな
本当に5秒感覚でキーを押したいならタイマーがいいけど、各動作を5秒感覚で実行したいならタイマーは使わない方がいいかな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★2 [お断り★]
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 [お断り★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★5 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★6 [ぐれ★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★4 [BFU★]
- 【速報】日本産牛肉の対中国輸出再開協議が中止 ★2 [おっさん友の会★]
- 【悲報】中国上海市民「総理は一般人じゃないんだからそんな発言したらダメですよ😅」ド正論を言われてしまう [359965264]
- 豊田章男「メイク・アメリカ・グレート・アゲイン!」高市早苗「80兆円送金よ~!」 [175344491]
- 【悲報】高市早苗さん、もう辞職しか選択肢がない… [271912485]
- 高市「中国とは安定的な関係を続けたい」習近平「☺」高市「台湾有事は日本有事!自衛隊を投入!」習近平「は?」 [165981677]
- 【急募】高市が来年いそうな場所 [237216734]
- 【ござる専🏡】風間🥷配信実況スレ🏯【風間いろは】
