问题在于按钮:contains('Deal')选择器,包含交易的按钮确实存在于页面上,Watin在主线程中运行时可以毫无问题地找到它。
// Add bet, deal cards and wait for animation
private void dealCards()
{
// Start the game if chip exists
if (browser.Image(Find.BySrc(chipURL)).Exists)
{
browser.Image(Find.BySrc(chipURL)).Click();
// This is where the thread stops
browser.Button(Find.BySelector("button:contains('Deal')")).Click();
Thread.Sleep(dealCardsAnimationTime);
if (Convert.ToInt32(browser.Span(Find.ByClass("player-points")).Text) == 21)
{
consoleTextBox.AppendText("You won by blackjack.");
gameOver = true;
}
return;
}
}
更新:
浏览器是一个Internet Explore窗口,我使用WatiN进行交互,除了UI更改之外,问题似乎是WatiN无法找到按钮。
然而,它仍然与多线程有些相关,因为相同的代码在没有多线程的情况下工作正常,并且它正在搜索的元素确实存在。
更新2:更改了问题的标题和描述,因为旧问题似乎与此无关。
上下文(如果有必要)
// When bet button is clicked
private void button2_Click(object sender, EventArgs e)
{
blackjackThread = new Thread(blackjackGame);
if (dealInProgress == false)
{
blackjackThread.Start();
// blackjackGame();
}
}
// Blackjack deal handler
private void blackjackGame()
{
consoleTextBox.AppendText("\r\n");
resetVariables();
dealCards();
if (gameOver == true)
{
checkResult();
dealInProgress = false;
blackjackThread.Abort();
return;
}
checkCards();
logPoints();
while (gameOver == false)
{
botAction();
}
checkResult();
dealInProgress = false;
blackjackThread.Abort();
return;
}