簡體   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