2012-11-29 56 views
0

我会通过给的我处理FormName.ButtonName.Visible =真 - 不工作(vb.net)

什么,我有一个Windows窗体一个简单的例子开始 - 让叫它“模拟”并在formA上我有一个按钮,在按钮的属性中设置visible = false。 我有一个名为MainLoop语句

Public class MainLoop 


sub new() 
end sub 

public sub run() 
     If someCondition then 
      formA.ButtonName.Visible = True 
     End if 


end sub 
end class 

我有一个以上的线程在这个应用程序中运行,一个线程只是不断通过这种“公共子跑”通过它循环运行,直到某些条件得到满足不同的类。通过调试和逐步执行应用程序,我确定它正在运行设置visiblity = true的行。但按钮只是没有显示在我的表单上。我已经确认它不是一个简单的拼写错误或任何东西 - 看起来我错过了这里的一个基本逻辑。

我曾尝试做

dim TempForm as new formA 

然后在IF语句我试图

TempForm.ButtonName.Visible = true 

但表单建立的一个新的实例 - 以及它不是在实际设置目前的形式,我正在使用按钮。

任何帮助表示赞赏。

+2

使用*类型名称*其中一个*对象变量*是必需的是一个可怕的vb.net陷阱。当你使用线程时,它永远不会失败,它会给你一个新的表单对象。使用TempForm是一种尝试解决方法,但落在**完全相同的陷阱中,您不希望更改新窗体实例上按钮的可见性。你需要用户正在看的那个。通过停止尝试从线程更新UI来提前完成。 BackgroundWorker是模板类,让你摆脱这种麻烦。 –

回答

0

为了任何人谁是想知道答案结束了,

Control.Invoke方法(委托对象())

教程可以发现here

2

如果您在UI线程以外的线程上设置可见性,则必须调用它才能看到该线程。你不能触摸另一个线程的UI线程上的任何东西。