Я не могу получить доступ к данным, которые я взял в методе «Invoke» снова - PullRequest
0 голосов
/ 01 апреля 2020

Я не могу получить доступ к данным, которые я получил методом 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);
}
...