2016-12-01 54 views
1

我在.Net框架4.5我怎樣才能改變調用(新動作)在C#3.0

做一個WinForm程序,現在我想使它在.Net框架3.0

使用線程,調用「Control.Invoke」 到datagridview的,但它不是工作..

我的代碼是這樣的

private void btnStart_Click(object sender, EventArgs e) 
    { 
     Thread th = new Thread(new ThreadStart(StartAnalyseTheSite)); 
     th.IsBackground = true; 
     th.Start(); 
    } 

    private void StartAnalyseTheSite() 
    { 
     InsertWebApplicationInfo(); 
     SelectWebApplicationInfo(); 
    } 

    private void InsertWebApplicationInfo() 
    { 
     DoSomething... 
    } 

    private void SelectWebApplicationInfo() 
    { 
     this.Invoke(new Action(() => { grdWebApplication.DataSource = dtwebApp; })); 
    } 

而且

this.Invoke(new Action((=){> grdWebApplication.DataSource = dtwebApp; }));

此代碼是不行的......

錯誤信息 - >

「行動」不包含一個構造函數1個參數

我如何更改代碼? ?有人幫我

+0

你能澄清你的意思是由它不工作?是否有例外?如果是這樣,它說什麼?是否有編譯錯誤?再次 - 如果是這樣 - 它說什麼? – Rob

+0

對不起,我添加了它。謝謝 –

回答

2

您可以使用這樣的代碼:

this.Invoke(new MethodInvoker(delegate() { /*Do sommething*/ })); 
+0

**注1:** .NET Framework 3.0使用C#2.0。 C#2.0引入了匿名方法的概念,它允許代碼塊作爲參數傳遞,而不是單獨定義的方法。 –

+0

**注2:**要爲'new Action(()=> {/*...*/})創建一個等價物,您可以先這樣創建一個委託:'public delegate void Action(); '然後創建該委託的實例,可以使用以下代碼:'new Action(delegate(){/ *...*/})''。由於'MethodInvoker'委託具有我們需要的簽名,所以我們沒有創建一個新委託並使用'MethodInvoker'。 –

+0

謝謝Reza Aghaei! 您的代碼和解釋是完美的!我瞭解如何在閱讀您的評論後使用它! –