質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

3433閲覧

ループ中の停止・再開の実装方法

Hottopia

総合スコア16

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/11/02 06:06

初歩的な質問でしたらすみません。
C#8.0 for文やforeach文等のループ処理時、一時停止、再開などは出来るものなのでしょうか?

具体的には、

for
{
~~処理~~

・イベントが入力されるまで停止

・イベント入力(クリックなど)

・イベントが発生したら再開

~~処理の続き~~
}

以上のような処理を実装できるかどうかについて、ご教示願います。
拙い文章で申し訳ありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/11/02 06:15

単純にイベントではだめなんですか? ざっと見た感じ、普通にイベント内でやれそうですけど。
dodox86

2021/11/02 06:53

そのループの処理が例えば別スレッドで実行されるもので、UIスレッドのイベントを待機(ループ中に停止)させたい、とのような用途なのであれば、WaitHandleで待機させればできると思います。 https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.waithandle.waitone?view=net-5.0 全てUIスレッド、非同期でやりたいなどというと事情は複雑になるので、どういう形態で動かすのか、より詳細を質問文中に示しましょう。
dodox86

2021/11/02 06:58

ちなみに質問の聞き方として「できるか・できないか」などと問うと、「できる」・「できない」で話は終わりです。よくそのような質問を見かけますが、それだけを聞きたい訳ではないのですよね。注意しましょう。
ku__ra__ge

2021/11/02 07:16

async/awaitでできる気がする。TaskCompletionSourceを使って作ったクリックで完了するTaskを返すメソッドをawaitで呼び出すとかすればいいんじゃないだろうか。
退会済みユーザー

退会済みユーザー

2021/11/02 07:18

そもそもどういう目的でそういうことがしたいのかを書いた方がより有益な答えが得られると思いますよ。XY 問題になっている質問もよく見かけますし。
Hottopia

2021/11/03 11:41

ありがとうございます。 質問の仕方、気をつけようと思います。
guest

回答1

0

ベストアンサー

できました。

C#

1private async void Form1_Load(object sender, EventArgs e) 2{ 3 for (var i = 1; i <= 3; i++) 4 { 5 Console.WriteLine("before:" + i.ToString()); 6 await WaitForClick(); // ボタンを押すまで待って以降の行を実行 7 Console.WriteLine("after:" + i.ToString()); 8 } 9} 10 11private Task WaitForClick() 12{ 13 var taskCompletionSource = new TaskCompletionSource<bool>(); 14 EventHandler clickEventHandler = null; 15 clickEventHandler = (s, e) => 16 { 17 button1.Click -= clickEventHandler; 18 taskCompletionSource.SetResult(true); 19 }; 20 button1.Click += clickEventHandler; 21 return taskCompletionSource.Task; 22}

投稿2021/11/02 07:28

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hottopia

2021/11/03 11:40

非同期処理というものがあったのですね。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問