C# 如何在IF语句中调用控件
我已经搜索了很长一段时间,寻找如何在if语句中调用控件,但没有找到任何相关信息。我肯定我错过了一些东西,但如果有人能告诉我如何做到这一点,那就太好了。下面是我的一小段代码,让您了解我的问题所在C# 如何在IF语句中调用控件,c#,delegates,controls,invoke,C#,Delegates,Controls,Invoke,我已经搜索了很长一段时间,寻找如何在if语句中调用控件,但没有找到任何相关信息。我肯定我错过了一些东西,但如果有人能告诉我如何做到这一点,那就太好了。下面是我的一小段代码,让您了解我的问题所在 if(cardPanelOpponent.GetChildAtPoint(new Point(i, x)) == null) { OpponentCard.Location = new Point(i, x); cardPanelOpponent.Invoke(new Action
if(cardPanelOpponent.GetChildAtPoint(new Point(i, x)) == null)
{
OpponentCard.Location = new Point(i, x);
cardPanelOpponent.Invoke(new Action(() => cardPanelOpponent.Controls.Add(OpponentCard))
break; }
这一行发生在异步环境中,因此我得到了一个跨线程异常。如何在与UI不同的线程上运行此if语句。如果您的代码在工作线程中运行,则不允许调用
GetChildAtPoint
或在其中设置位置。您需要将控件传递给UI线程
if(cardPanelOpponent.InvokeRequired)
{
cardPanelOpponent.Invoke(new Action(() =>
{
if(cardPanelOpponent.GetChildAtPoint(new Point(i, x)) == null)
{
OpponentCard.Location = new Point(i, x);
cardPanelOpponent.Controls.Add(OpponentCard);
}
});
}
注意:上述代码中的语义已更改。我们不能在这里添加break语句。因此,您可能需要根据需要对其进行更正。好的,if语句可以正常工作,但由于无法中断,它基本上陷入了无限循环中。我不确定我是否理解如何回到UI线程上,以便在它添加控件后能够跳出循环,而不是继续。有什么建议吗?发布完整的循环代码,可能是整个方法。我将尝试根据Lyokay更新我的答案,我所做的是创建一个bool变量,如果它添加了控件,则将其设置为true。在匿名方法之后,我检查它并从那里中断。谢谢你的帮助。