更新: 我已经改进了一些东西并进行了更改。 现在,我必须第二次单击,这是控制台第一次写入:
Der Thread 0x180c hat mit Code 0 (0x0) geendet.(Thread stopped)
在第二个复选框上它起作用。
OLD 当我单击复选框时,我的应用程序应访问URL。它是有效的,但前提是我在复选框上单击了多次。
因此,当我想要停止它时,它将无法工作。我不知道为什么。按钮相同,我必须多次单击它才能起作用。
private void chVisitProfile_CheckedChanged(object sender, EventArgs e)
{
if (chVisitProfile.Checked)
{
var threadLoading = new ThreadStart(StartVisiting);
var thread = new Thread(threadLoading);
thread.Start();
}
}
private void StartVisiting()
{
var jsDo = "var urls = '';" +
"$.each($('.tile__link').find('.info__username'), function(i, b){var profilname = '" + "https://www.website.com/#/profile/" + "' +$(this).text().trim() + '" + "@" + "';urls+=profilname;});" +
"function returnURL(){thURL = urls;return thURL;} returnURL();";
var task = chromeControll.EvaluateScriptAsync(jsDo);
task.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
var EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message;
richTextBox1.BeginInvoke((Action)(() => richTextBox1.Text = response.Result.ToString()));
}
});
var links = richTextBox1.Text;
string[] exploded = links.Split('@');
for (int i = 1; i < exploded.Length; i++)
{
if(chVisitProfile.Checked == false)
{
break;
}
Thread.Sleep(500);
chromeVisit.Load(exploded[i]);
//lblSeconds.Text = i.ToString();
}
}
答案 0 :(得分:1)
为什么甚至不需要启动线程?我建议像这样:
private void chVisitProfile_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
var threadLoading = new ThreadStart(StartVisiting);
var thread = new Thread(threadLoading);
thread.Start();
}
}
这样,线程仅在需要时触发。为了进一步改进它,它可以验证进程是否已经进行(因此无需启动新线程)。