2

所以我有这些变量

List<string> files, images = new List<string>();
string rootStr;

而这个线程函数

private static int[] thread_search(string root,List<string> files, List<string> images)

但是当我尝试启动线程时:

trd = new Thread(new ThreadStart(this.thread_search(rootStr,files,images)));

我收到此错误:

错误 1 ​​成员 'UnusedImageRemover.Form1.thread_search(string, System.Collections.Generic.List, System.Collections.Generic.List)' 无法通过实例引用访问;使用类型名称来限定它 E:\Other\Projects\UnusedImageRemover\UnusedImageRemover\Form1.cs 149 46 UnusedImageRemover

你能告诉我我做错了什么吗?

4

1 回答 1

7

你有一个静态方法,这意味着它不属于一个实例。this指的是当前实例,但由于它是静态的,因此没有意义。

只需删除this.,您应该会很好。

编辑

删除this.会给你一个不同的例外。您应该将void委托传递给ThreadStart构造函数,并且您过早调用该方法并传递结果(int[])。您可以改为传入 lambda,例如:

static void Main(string[] args) {
    List<string> files = new List<string>(), images = new List<string>();
    string rootStr = "";

    var trd = new Thread(new ThreadStart(() => thread_search(rootStr, files, images)));
    trd.Start();
}

private static int[] thread_search(string root, List<string> files, List<string> images {
    return new[] { 1, 2, 3 };
}

现在线程有一个对您的搜索功能的委托,对参数有一个闭包 - 如果您还不熟悉线程和闭包,您将需要阅读它们。

于 2013-04-15T19:21:16.110 回答