C#,从后台线程调用匿名方法(Action<>)

时间:2013-09-04 18:50:50

标签: c# multithreading anonymous-methods

这应该很简单!

我想创建一个匿名的Action<>委托执行GUI更新,我将从其他几个匿名代表(将在不同的线程上运行)调用。

    void Test() {

        Action<string> invokeDisplay = new Action<string>(delegate(string Element) {
            //Do a variety of things to my GUI depending on Element parameter
        });


        MethodInvoker opLong1 = new MethodInvoker(delegate() {

        //  Do long task

            this.Invoke(invokeDisplay("long1"));
        });

        MethodInvoker opLong2 = new MethodInvoker(delegate() {

        //  Do long task

            this.Invoke(invokeDisplay("long2"));
        });

        new Thread(new ThreadStart(opLong1)).Start();
        new Thread(new ThreadStart(opLong2)).Start();
    }

那么这条线的语法是否正确?

            this.Invoke(invokeDisplay("long1"));

2 个答案:

答案 0 :(得分:4)

语法为:

Invoke(action, "long1");

委托是第一个参数,您要传递给它的参数如下。

答案 1 :(得分:1)

另一个可用选项:

this.Invoke((Action)(() => invokeDisplay("long1")));