【问题标题】:Cross-thread operation not valid in C# [duplicate]C#中的跨线程操作无效[重复]
【发布时间】:2011-03-27 05:27:19
【问题描述】:

可能重复:
Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.

您好, 我正在尝试从线程更新按钮状态,但出现此错误:

“跨线程操作无效:控件'btn1'从创建它的线程以外的线程访问。”

请告知如何解决此问题。

这是我的代码:

 if (strMyPlayer == "Player One")
 {
      if (srReceiver.ReadLine() == "Player One says: btn1")
      {
           btn1.Text = "O";
           btn1.Enabled = false; 
      }
 }
 else
 {
      if (srReceiver.ReadLine() == "btn1")
      {
           btn1.Text = "X";
           btn1.Enabled = false;
      }     
 }

【问题讨论】:

  • 至少有 20 个相同的问题,而且谷歌查询的第一个结果会给你解决方案。我真的很想听听您为什么不尝试寻找解决方案。

标签: c#


【解决方案1】:

您也许应该使用调用函数在控制线程上运行该函数。

http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您无法从后台线程更新 UI 元素。我猜 srReceiver 在后台线程上运行。

      您可以使用委托对其进行更新:

      btn1.Invoke(delegate {
                                   btn1.Enabled = "OK";
                                   btn1.Text = "X";
                            });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        相关资源
        最近更新 更多