2011-06-01 29 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代替您的代碼。