Есть игра в угадывание числа. При загрузке формы вызывается второй поток - th и задает случайное число, которое пользователь в последующем должен угадать
После нажатия на кнопку второй поток сравнивает введенное число.
Я сделал запуск потока при открытии формы и его приостановка после задания случайного числа, дабы возобновить его когда надо будет проверить число.
Пробовал сбросить поток или приостановить. В любом случае, он либо не останавливается, либо не запускается по новой.
Собственно вопрос: как исправить это и сделать правильно?
код формыnamespace OS1 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace Threading;
//using namespace System::IO;
/// <summary>
/// Сводка для MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
}
//код формы
}
#pragma endregion
int num; // это номер который мы загадали
int rnd; // это номер который загадали нам
int st = 0;
Thread^ th = gcnew Thread(gcnew ThreadStart(this, &MyForm::check));
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
th->Start();
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
th->Resume();
}
void check() {
this->ChangeText();
}
};
}
следующий код мне подсказали для обращения к форме из th:
delegate void SetVoidDelegate();
private: System::Void ChangeText() {
if (this->textBox1->InvokeRequired) {
using namespace System;
SetVoidDelegate^ d = gcnew SetVoidDelegate(this, &MyForm::ChangeText);
this->Invoke(d);
}
else {
if (textBox2->Text == String::Empty) {
using namespace std;
srand((int)time(0));
rnd = (rand() % 100) + 1;
textBox2->Text = "" + rnd;
th->Suspend();
st=1;
}
if (st == 1); {
num = Convert::ToInt32(textBox1->Text);
if (num == rnd) {
textBox1->Text = "exelent";
label1->Visible = true;
}
else if (num < rnd) textBox1->Text = "more!";
else if (num > rnd) textBox1->Text = "less!";
}
}
}