Я пытаюсь тренироваться, как создать что-то, что существенно приостанавливает мой цикл while до тех пор, пока не будет нажата кнопка button1, я знаю о обработчике события button1_Click, но я не знаю Думаю, что это сработает в этой ситуации, поскольку у меня много циклов, вложенных друг в друга в моей form_load.Приостановить цикл while до тех пор, пока кнопка не будет нажата без использования обработчика событий C#
Любая помощь была бы высоко оценена!
Это является отрезал мой код, где я хочу цикл, чтобы быть «приостановлено» с примечаниями:
while (reader2.Read())
{
QuestionSpace = Convert.ToString(reader2["Question Space"]);
label1.Text = QuestionSpace;
if (button1.Click = true) // if the button is clicked)
{
// continue with the while loop (I am going to add an INSERT SQL query in here later)
}
else
{
// pause until the button is pressed
}
}
Всем моим код форма:
public partial class CurrentlySetTestForm : Form
{
private int QuestionID { get; set; }
private string QuestionSpace { get; set; }
public CurrentlySetTestForm()
{
InitializeComponent();
}
private void CurrentlySetTestForm_Load(object sender, EventArgs e)
{
string y = GlobalVariableClass.Signedinteacher;
MessageBox.Show(y);
Convert.ToInt32(y);
string connectionString = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;
SqlConnection connect = new SqlConnection(connectionString);
connect.Open();
SqlCommand command18 = new SqlCommand("SELECT [QuestionID] FROM QuestionStudentAssociation WHERE ([StudentID][email protected])", connect);
command18.Parameters.AddWithValue("@Signedinstudent", y);
var reader = command18.ExecuteReader();
while (reader.Read())
{
QuestionID = Convert.ToInt32(reader["QuestionID"]);
SqlCommand command19 = new SqlCommand(@"SELECT [Question Space] FROM Questions WHERE ([QuestionID] = @currentQID)", connect);
command19.Parameters.AddWithValue("@currentQID", QuestionID);
try
{
var reader2 = command19.ExecuteReader();
while (reader2.Read())
{
QuestionSpace = Convert.ToString(reader2["Question Space"]);
label1.Text = QuestionSpace;
if (button1.Click = true) // if the button is clicked)
{
// continue with the while loop (I am going to add an INSERT SQL query in here later)
}
else
{
// pause until the button is pressed
}
}
}
catch (SyntaxErrorException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
MessageBox.Show("Done one loop");
}
}
}
}
Если вы заблокируете выполнение в потоке пользовательского интерфейса, пользовательский интерфейс не будет отвечать на пользователя, поэтому она не сможет нажать кнопку. Вы могли бы рассмотреть задачу фоновой задачи в фоновом потоке и использовать AutoResetEvent для использования Заданий. –
Я не уверен на 100%, что вы подразумеваете под этим – mot375
Если вы хотите выполнить блокирующий код, вам нужно выполнить это в потоке, отличном от потока пользовательского интерфейса. –