2015-05-09 93 views
-2

我有一個程序將方法及其參數從Form1類(Windows Form-UI)發送到另一個任務。將mehod傳遞給Form1類中的任務

我寫道:

private void Activate_Click(object sender, EventArgs e) 
{ 
    Task task = new Task(() => mng.start(switchAB.Text, switchC.Text, switchDE.Text, switchF.Text, switchG.Text, switchH.Text,textBox1.Text)); 
    task.Start(); 
} 

,但有錯誤我:

InvalidOperationException異常是未處理的用戶代碼 -

跨線程操作無效:控制 'switchAB'從創建線程以外的線程訪問。

mng.start是一個在managet類中獲取此參數的方法。

我該如何解決它?

回答

3

我認爲錯誤告訴你你需要知道的每件事。您不能從除創建線程以外的線程訪問UI元素。因此,當您在任務內訪問switchAB.Text時,您違反了此規則。

訣竅是在UI線程上獲取文本,並將其作爲文本傳遞給任務。

試試這個:

private void Activate_Click(object sender, EventArgs e) 
{ 
    var sab = switchAB.Text; 
    var sc = switchC.Text; 
    var sde = switchDE.Text; 
    var sf = switchF.Text; 
    var sg = switchG.Text; 
    var sh = switchH.Text; 
    var tb1 = textBox1.Text; 
    Task task = new Task(() => mng.start(sab, sc, sde, sf, sg, sh, tb1)); 
    task.Start(); 
}