2011-06-01 31 views
3

我有一个文本框中有一些文本(“你好”)。如果我将文本更改为其他任何内容并从文本框中获取文本(通过代码),我会得到“你好”,尽管我改变了它。窗体和代码Unsynched

在另一种情况下,当我更改复选框的检查状态时,复选框不会在视觉上勾选(或取消勾选)。

任何人有一个想法是怎么回事,以及如何同步它们?

我已经开了一个新的项目, 这就是我的表上的唯一功能:

public void Switch() 
    { 
     Checkbox1.Checked = !Checkbox1.Checked; 
    } 

,我把它从Program.cs的:

static MainForm MyForm; 
MyForm = new MainForm(); 
MyForm.Switch(); 
+0

你是从UI线程做的吗?另外,我们可以看到一些代码吗? – pickypg 2011-06-01 03:58:09

+0

您正在使用错误的表单对象引用。 – 2011-06-01 04:39:51

+0

我编辑了可能是问题的帖子 – 2011-06-01 11:34:32

回答

0

我认为你是只需在Main中实例化MainForm,然后调用Switch即可。

这意味着您不在UI线程上发送请求。

所以,你可以Invoke你的代码在UI线程上运行:

public void Switch() 
{ 
    // true if off of the UI thread, and thus must be Invoked 
    if (this.InvokeRequired) 
    { 
     // off UI thread; put it onto it 
     this.Invoke(Switch); 
    } 
    else 
    { 
     // on UI thread 
     Checkbox1.Checked = ! Checkbox1.Checked; 
    } 
} 

您应该只从UI线程的UI交互。除非您期望将其从UI线程中调用,或者您为其他人提供了一种方法(某些公共API),否则不应该使用Invoke s代替您的代码。