c#成员不能被实例引用访问

本文关键字:引用 访问 实例 成员 不能 | 更新日期: 2023-09-27 18:09:26

我有这些变量

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)));

我得到这个错误:

Error 1 Member 'UnusedImageRemover.Form1.thread_search(string,System.Collections.Generic.List,System.Collections.Generic.List)'无法使用实例参考;用类型名限定它instead E:'Other'Projects'UnusedImageRemover'UnusedImageRemover' form .cs 149 46 UnusedImageRemover

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

c#成员不能被实例引用访问

您有一个静态方法,这意味着它不属于实例。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 };
}

现在线程有一个委托给你的搜索函数,在参数上有一个闭包——如果你还不熟悉线程和闭包,你会想要阅读它们。