「どんなにくだらない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:GNLsbK4F071デフォルトの名無しさん (ワッチョイ 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秒感覚で実行したいならタイマーは使わない方がいいかな
148デフォルトの名無しさん (ワッチョイ a375-Iw9I)
2017/12/24(日) 07:21:26.36ID:ZzoS8BMq0 へー、そんなんだ。すごーい。
149デフォルトの名無しさん (ワッチョイ 0353-HtKy)
2017/12/24(日) 07:22:49.50ID:bwNsD4dr0 クリスマスぐらい女と過ごせよ
150デフォルトの名無しさん (アウーイモ MM67-1kTE)
2017/12/24(日) 14:33:03.85ID:WF18n6kNM 2〜3台のPCだけで使う小規模なアプリケーションで、不変で追加もしない500×3列程度のデータを扱いたいです。EXCELでいうvlookup関数みたいな参照を行いたいのですが、EntityFrameworkだとSQLserverのインストールが必要?なため別の方法を模索中です。
csvやtxtファイルを実行ファイルと同じフォルダにいれて参照するのがいいか、もしくは別の方法があればご教示いただきたいです
csvやtxtファイルを実行ファイルと同じフォルダにいれて参照するのがいいか、もしくは別の方法があればご教示いただきたいです
151デフォルトの名無しさん (オッペケ Sr87-0cyC)
2017/12/24(日) 14:33:41.85ID:EoGwjq2qr 朝Hしてきたww
152デフォルトの名無しさん (ワッチョイ ff06-buzn)
2017/12/24(日) 14:39:27.53ID:h6xl/PRx0 >>150
EF知ってるならSQLiteが現実的じゃね?
EF知ってるならSQLiteが現実的じゃね?
153デフォルトの名無しさん (ワントンキン MM9f-Px6h)
2017/12/24(日) 14:40:54.62ID:i8D7y6TzM154デフォルトの名無しさん (ブーイモ MM67-bebx)
2017/12/24(日) 14:44:06.81ID:BNj/0IJ2M 俺ならそんなもん一枚のHTMLとJavaScriptで作ってAWS S3に置くわ
その程度のことにデプロイの手間をかけるのはアホらしすぎる
その程度のことにデプロイの手間をかけるのはアホらしすぎる
155デフォルトの名無しさん (ワッチョイ 6302-Iw9I)
2017/12/24(日) 17:13:18.55ID:LxzgKTLN0156デフォルトの名無しさん (ブーイモ MM67-bebx)
2017/12/24(日) 17:45:11.77ID:BNj/0IJ2M 今時一切ブラウザ使わない業務システムなんか存在するのか?
ブラウザくらい常に開いてるだろ
ブラウザくらい常に開いてるだろ
157デフォルトの名無しさん (ワッチョイ 0f9c-XiD2)
2017/12/24(日) 18:29:58.39ID:/uYLPwgV0 500×3でたかだが1500前後にデータベースは大げさだ
.resxファイルで済む量だろう
.resxファイルで済む量だろう
158デフォルトの名無しさん (ワッチョイ 039e-rt3g)
2017/12/24(日) 22:22:23.70ID:Pk6n0aea0159デフォルトの名無しさん (ワッチョイ 6f9d-PGwP)
2017/12/24(日) 22:47:41.55ID:fqHoYjgG0 DataTableでいいんじゃね
160デフォルトの名無しさん (ワッチョイ 3317-7LW1)
2017/12/24(日) 22:53:06.60ID:MFJnXVyx0 てきとーなクラス作ってXmlSerializerで永続化すりゃOK
検索も500件程度なら速度を気にせずLINQで楽々実装可能
検索も500件程度なら速度を気にせずLINQで楽々実装可能
161デフォルトの名無しさん (ワッチョイ 2323-bebx)
2017/12/24(日) 23:03:51.51ID:V0wW1gjw0 今時新規でXMLはないわ
このまま衰退して消えてくれ
このまま衰退して消えてくれ
162デフォルトの名無しさん (アウアウウー Sa67-fOQO)
2017/12/24(日) 23:08:30.69ID:T0V8golIa >>161
最新だと何が人気?
最新だと何が人気?
163デフォルトの名無しさん (ワッチョイ 03c9-buzn)
2017/12/24(日) 23:09:33.19ID:8Z10fIlT0 読むだけだしJSONやYAMLでよくね?
164デフォルトの名無しさん (ワッチョイ 138d-6js8)
2017/12/24(日) 23:22:41.54ID:Tzue5pu10 JSONの指定があればJSONでもいいけど
何も指定がなければXMLで書くけどな
別にレガシーでもなくね?
何も指定がなければXMLで書くけどな
別にレガシーでもなくね?
165デフォルトの名無しさん (アウアウウー Sa67-fOQO)
2017/12/24(日) 23:22:45.70ID:T0V8golIa >>163
大してかわんねーじゃん
大してかわんねーじゃん
166デフォルトの名無しさん (ワッチョイ a375-Iw9I)
2017/12/24(日) 23:29:42.77ID:ZzoS8BMq0 結論:好きにしろ
167デフォルトの名無しさん (ワッチョイ f38a-IlPN)
2017/12/25(月) 00:41:48.94ID:eNXAkvu40 じゃprofileで
168デフォルトの名無しさん (アウアウウー Sa67-fOQO)
2017/12/25(月) 01:51:22.86ID:GOMg9JlCa でも項目数多くなって激遅になったらCSVに戻せる構造なら戻したほうがいいよ
169デフォルトの名無しさん (ワッチョイ f381-0FwS)
2017/12/25(月) 03:41:46.71ID:Jnt6vkvB0 jsonってxmlとくらべて何がおいしいの?
170デフォルトの名無しさん (アウアウアー Saff-1kTE)
2017/12/25(月) 07:08:19.08ID:8aC1MlXsa xml、resx、json、yaml、SQLiteといろいろ選択肢がありますね。少し調べてみて良さそうなもの選んでみます。ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で [お断り★]
- 【速報】中国外務省報道官 高市首相発言撤回なければ「断固たる対抗措置」 ★3 [蚤の市★]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で ★2 [お断り★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★7 [ぐれ★]
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★3 [お断り★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★3
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★4
- エッヂ落ちた?
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★5
- 山上徹也が実家で毎日見せられていた光景www【安倍晋三】 [177178129]
- 【緊急】水ダウひ避難所
