繁体   English   中英

C#:预期的方法名称

[英]C# : Method name expected

我有这个方法来计算某个文件夹中的文件:

    private void countfiles(string path)
    {
        if (path != "")
        {
            DirectoryInfo dir = new DirectoryInfo(path);

            foreach (FileInfo filesindires in dir.GetFiles())
            {
                if (filesindires.FullName != Application.ExecutablePath)
                {
                    num_files++;
                    Thread.Sleep(1);
                }
            }

            foreach (DirectoryInfo dirsinfolder in dir.GetDirectories())
            {
                countfiles(dirsinfolder.FullName);
            }
        }           
    }

当用户点击计数按钮时我想制作一个线程,所以程序不会挂起。

Thread count = new Thread(new ThreadStart(countfiles(@"E:/test")));

但是我甚至在调试之前就得到了这个错误

Method Name Expected

我不明白; 这个错误需要我什么?

最后非常感谢您的帮助。

它的

Thread count = new Thread(new ParameterizedThreadStart(countfiles));    
count.Start(@"E:/test");

您不必传递参数,只需传递方法名称。

您还需要将参数类型更改为object ,而不是string 或者,如果要保留string参数,可以使用:

Thread count = new Thread(
   o => 
   {
       countFiles((string)o);    
   });
count.Start(@"E:/test");

问题出在这里:

new ThreadStart(countfiles(@"E:/test"))

参数是一个试图伪装成方法组方法调用 编译器可以将兼容的方法组,lambda表达式或匿名方法转换为委托类型,但不能转换为方法调用。

尝试以下方法之一:

// Lambda
var thread = new Thread(() => countfiles(@"E:/test")); 

// Anonymous method
var thread = new Thread( delegate() { countfiles(@"E:/test"); }); 

如果要使用方法组,则需要单独的方法:

private void CountTestFiles()
{
     countFiles(@"E:/test");
}

然后你可以这样做:

// Method-group
var thread = new Thread(CountTestFiles) 

你也可以使用ParameterizedThreadStart委托类型和Thread构造函数的相关重载,但由于参数是object ,所以使用它有点尴尬,因此某个地方或另一个地方的转换将是不可避免的。

看看ParameterizedThreadStart委托。 这将为您传递值。

Thread count = new Thread(countfiles); 
count.Start(@"E:/test");

ThreadStart构造函数应该是您的代码:

Thread count = new Thread(new ThreadStart(countfiles));
count.Start();

它需要知道要执行哪种方法,而不是方法的结果。 但是既然你有一个参数,你需要这样做:

Thread count = new Thread(new ParameterizedThreadStart(countFiles));
count.Start(@"E:/test");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM