2016-12-01 26 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! 您的代码和解释是完美的!我了解如何在阅读您的评论后使用它! –