Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递到.NET中的Task.Factory.StartNew_C#_Task - Fatal编程技术网

C# 将参数传递到.NET中的Task.Factory.StartNew

C# 将参数传递到.NET中的Task.Factory.StartNew,c#,task,C#,Task,我正在开发一个小型实用程序,它将扫描一个FTP文件夹,在我们的网络上,每个打印机都有一个文件夹。在每个打印机文件夹中,都有需要打印的文件 下面是我到目前为止的测试代码: namespace PrintTest { class Program { const string ftpDir = @"C:\Users\Latheesan\Desktop\FTP"; static void Main(string[] args) {

我正在开发一个小型实用程序,它将扫描一个FTP文件夹,在我们的网络上,每个打印机都有一个文件夹。在每个打印机文件夹中,都有需要打印的文件

下面是我到目前为止的测试代码:

namespace PrintTest
{
    class Program
    {
        const string ftpDir = @"C:\Users\Latheesan\Desktop\FTP";

        static void Main(string[] args)
        {
            StartScan();

            Console.ReadKey();
        }

        static void StartScan()
        {
            // Scan ftp dir
            var printerDirs = Directory.GetDirectories(ftpDir);

            // Proceed if any printer dirs were found
            if (printerDirs.Length > 0)
            {
                // Init task list
                Task[] scanPrinterTasks = new Task[printerDirs.Length];

                // Iterate through each found printer dir
                for (int i = 0; i < printerDirs.Length; i++)
                {
                    // Configure printer tasks
                    var printerName = printerDirs[i];
                    printerDirs[i] = Task.Factory.StartNew(() => 
                        ScanPrinterDir(printerName));
                }

                // Wait for all tasks to finish
                Task.WaitAll(scanPrinterTasks);
            }
        }

        static void ScanPrinterDir(string printerName)
        {
            // todo
        }
    }
}
名称空间打印测试
{
班级计划
{
常量字符串ftpDir=@“C:\Users\Latheesan\Desktop\FTP”;
静态void Main(字符串[]参数)
{
StartScan();
Console.ReadKey();
}
静态void StartScan()
{
//扫描ftp目录
var printerDirs=Directory.GetDirectories(ftpDir);
//如果找到任何打印机目录,请继续
如果(printerDirs.Length>0)
{
//初始化任务列表
任务[]scanPrinterTasks=新任务[printerDirs.Length];
//遍历找到的每个打印机目录
对于(int i=0;i
ScanPrinterDir(printerName));
}
//等待所有任务完成
Task.WaitAll(扫描打印任务);
}
}
静态void scannerDir(字符串printerName)
{
//待办事项
}
}
}
当我尝试编译此文件时,会出现以下错误:

严重性代码说明项目文件行错误CS0029无法 隐式地将类型“System.Threading.Tasks.Task”转换为 “字符串”打印测试C:\Users\Latheesan\Desktop\PrintTest\PrintTest\Program.cs 34


如何将参数传递给由
Task.Factory.StartNew调用的方法?

此处传递参数没有错误,但是Task的返回类型不是字符串,这就是为什么会出现编译时错误

我想你需要

       scanPrinterTasks[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));
而不是

      printerDirs[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));

在这里传递参数没有什么错误,但是任务的返回类型不是字符串,这就是为什么会出现编译时错误

我想你需要

       scanPrinterTasks[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));
而不是

      printerDirs[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));

您的问题是
Task.Factory.StartNew
返回一个任务,但您随后将其分配给
printerDirs
,这是一个字符串数组-您的意思是将返回的任务添加到
scanPrinterTasks
?您的问题是
Task.Factory.StartNew
返回一个任务,但是您随后将其分配给
printerDirs
,这是一个字符串数组-您的意思是将返回的任务添加到
scanPrinterTasks