Visual studio 2010 如何在VisualStudio中创建静态组件?

Visual studio 2010 如何在VisualStudio中创建静态组件?,visual-studio-2010,thread-safety,Visual Studio 2010,Thread Safety,我正在做一个有很多表单的应用程序,一些组件必须从另一个表单访问一些组件…当我将我的richtextbox公开并尝试从其他地方访问它时,它会显示线程安全错误bla bla…所以我将该文本框设为静态,以便只有属于该类的对象,我可以像这样访问它这个 Form1.richTextBox.Text 这很好,但问题是每次我向winform添加一个新组件时,我的静态对象就变成了非静态对象,我对对象的所有直接访问都变成了错误。 我的问题是如何使visual studio停止修改我的代码(设计代码)?或

我正在做一个有很多表单的应用程序,一些组件必须从另一个表单访问一些组件…当我将我的richtextbox公开并尝试从其他地方访问它时,它会显示线程安全错误bla bla…所以我将该文本框设为静态,以便只有属于该类的对象,我可以像这样访问它这个

Form1.richTextBox.Text    
这很好,但问题是每次我向winform添加一个新组件时,我的静态对象就变成了非静态对象,我对对象的所有直接访问都变成了错误。
我的问题是如何使visual studio停止修改我的代码(设计代码)?或者在没有循环依赖的情况下安全地从其他表单访问对象?

尝试创建一些静态元素,如String myStatic,并从其他表单访问此元素。在需要更新此元素的地方,请使用以下方法

void UpdateMyStatic() {
myStatic = richTextBox.Text;
}
从您的评论“尝试从其他地方访问它,它表示线程安全错误” 我相信这是一个跨线程的操作。在后台/工作线程上执行的是“其他地方”吗?不是你的richtextbox被实例化的线程。 如果是这样,则必须测试invokererequired属性。 从MSDN: “获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用调用方法,因为调用方所在的线程与创建控件的线程不同。”


顺便说一句:即使你看到一个C#对象(richtextbox),它也只是一个Windows句柄上的外观。因此,VisualStudio的行为是正确的。一个控件只能有一个父控件(即窗口),如果你“认为”你需要一个静态richtextbox,那么你应该重新考虑你的设计。

是的,这是个好主意,但我在给一个文本框写信,而不是阅读。另外,该方法必须是静态的,才能使用静态变量。所以当你把mystatic文本设置为静态时,它也会迫使你把richTextBox设置为静态