我怎样才能改变调用(新动作)在C#3.0
我在.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个参数
我如何更改代码? ?有人帮我
您可以使用这样的代码:
this.Invoke(new MethodInvoker(delegate() { /*Do sommething*/ }));
**注1:** .NET Framework 3.0使用C#2.0。 C#2.0引入了匿名方法的概念,它允许代码块作为参数传递,而不是单独定义的方法。 –
**注2:**要为'new Action(()=> {/*...*/})创建一个等价物,您可以先这样创建一个委托:'public delegate void Action(); '然后创建该委托的实例,可以使用以下代码:'new Action(delegate(){/ *...*/})''。由于'MethodInvoker'委托具有我们需要的签名,所以我们没有创建一个新委托并使用'MethodInvoker'。 –
谢谢Reza Aghaei! 您的代码和解释是完美的!我了解如何在阅读您的评论后使用它! –
你能澄清你的意思是由它不工作?是否有例外?如果是这样,它说什么?是否有编译错误?再次 - 如果是这样 - 它说什么? – Rob
对不起,我添加了它。谢谢 –