Я не могу получить доступ к данным, которые я получил методом Invoke снова. У меня проблема с методом под названием IslemeBasla
. При нажатии кнопки с именем Run метод с именем IslemeBasla
запускается вместе с потоком. Я могу присвоить значение переменной с именем HtmlElementCollection
тип кнопки, когда я смотрю на нее с точкой останова, значения приходят. Но когда я хочу вернуться с foreach
, значения не появляются.
Где я делаю ошибки?
Коды
private void BtnCalistir_Click(object sender, System.EventArgs e)
{
ThTakipEtIslemi = new Thread(() => IslemeBasla());
ThTakipEtIslemi.Start();
}
private void IslemeBasla()
{
HtmlElementCollection buttons = null;
var islemSayisi = 0;
if (BaslangicSaniyesi < BitisSaniyesi && ToplamIslemSayisi > 0)
{
Invoke((Action)(() =>
{
lblCalismaDurumu.Text = "Durum : Çalışıyor";
}));
while (true)
{
Invoke((Action)(() =>
{
buttons = webBrowser.Document.GetElementsByTagName("button");
}));
foreach (HtmlElement button in buttons)
{
if (button.GetAttribute("className").Contains("text")
&& button.GetAttribute("className").Contains("medium"))
{
button.InvokeMember("click");
islemSayisi++;
lblTopIslem.Invoke(new Action(() =>
{
lblTopIslem.Text = "Toplam " + islemSayisi + " işlem yapıldı";
}));
Thread.Sleep(1500);
}
}
}
}
}
Обновленные коды
private async void BtnCalistir_Click(object sender, System.EventArgs e)
{
BaslangicSaniyesi = Convert.ToInt32(txtIslemSuresiBaslangic.Text);
BitisSaniyesi = Convert.ToInt32(txtIslemSuresiBitis.Text);
ToplamIslemSayisi = Convert.ToInt32(txtTopIslemSayisi.Text);
SayfayaGit();
HtmlElementCollection buttons = null;
var islemSayisi = 0;
if (BaslangicSaniyesi < BitisSaniyesi && ToplamIslemSayisi > 0)
{
lblTopIslemSayisi.Text = "Toplam " + islemSayisi + " işlem yapıldı";
lblCalismaDurumu.Text = "Durum : Çalışıyor";
while (true)
{
buttons = webBrowser.Document.GetElementsByTagName("button");
for (int i = 0; i < buttons.Count; i++)
{
if (buttons[i].GetAttribute("className").Contains("text") && buttons[i].GetAttribute("className").Contains("medium"))
{
await Task.Delay(rndm.Next(BaslangicSaniyesi, BitisSaniyesi) * 1000);
buttons[i].InvokeMember("click");
lblTopIslemSayisi.Text = "Toplam " + ++islemSayisi + " işlem yapıldı";
if (islemSayisi >= ToplamIslemSayisi || islemSayisi % 5 == 0) break;
}
}
if (islemSayisi >= ToplamIslemSayisi)
{
BaslangicSaniyesi = 1;
BitisSaniyesi = 2;
ToplamIslemSayisi = 1;
lblCalismaDurumu.Text = "Durum : İşlem Sona Erdi!";
break;
}
else if (islemSayisi > 4 && islemSayisi % 5 == 0)
SayfayaGit();
}
}
}
private async void SayfayaGit()
{
webBrowser.Navigate("https://url.com");
await Task.Delay(0);
SayfaninYuklenmesiniBekle();
}
private async void SayfaninYuklenmesiniBekle()
{
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
await Task.Delay(0);
}