【问题标题】:System.InvalidOperationException setting texbox textSystem.InvalidOperationException 设置文本框文本
【发布时间】:2014-05-14 11:18:45
【问题描述】:

我正在使用一个线程运行此代码:

try
{
    Form1 f = getForm<Form1>();
    f.changePrice(price);
}
catch (Exception e)
{
    Console.WriteLine("error: " + e);
}

这里是changePrice 方法:

public void changePrice(Int32 price)
{
   txtPrice.Text = ""+price;
}

我想在我的文本框“txtPrice”中添加文本。

【问题讨论】:

  • 将空字符串添加到整数?请开始阅读。
  • changePriceownsForm1 使用的是同一线程吗?您不能以这种方式从其他线程更改Control 的属性。
  • 它正在被另一个线程使用,Kamil 有什么建议吗?
  • 你不能那样做,使用这里描述的方式:stackoverflow.com/questions/661561/…
  • 错误信息究竟是什么意思?

标签: c# multithreading forms user-interface invalidoperationexception


【解决方案1】:

您应该像这样在运行时更改您的文本框文本。

public void changePrice(Int32 price)
    {
        if (InvokeRequired)
        {
            this.Invoke(new Action<Int32>(changePrice), new object[] { price });
            return;
        }

        txtPrice.Text = ""+ price;          
    }

这样就可以了。

【讨论】:

【解决方案2】:

将其转换为string,因为Text 属性的类型为string

public void changePrice(Int32 price)
{
   txtPrice.Text = price.ToString();

}

【讨论】:

  • 这不是必须的,所有C#内置类型都可以隐式转换为字符串,无需手动进行。
  • 我没听懂你想说什么,Op 正在设置 TExtBox 的文本,它需要 String 而不是 Int
  • TextBox.Text 是一个string 对象,您可以使用(例如)string _Text = "partOfString"+5;。编译器会将"partOfString"+5 合并为字符串本身,因为Int32 被隐式转换为字符串。只要表达式中有一段字符串,它就会起作用。 OP 的方法,txtPrice.Text = ""+price; 肯定不整洁,但这仍然不是主要问题。
  • 好的..感谢您的纠正,我不知道这种行为
  • 我仍然收到无效操作异常。它说“跨线程操作无效”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2011-09-27
  • 1970-01-01
相关资源
最近更新 更多