C# 将参数传递到.NET中的Task.Factory.StartNew
我正在开发一个小型实用程序,它将扫描一个FTP文件夹,在我们的网络上,每个打印机都有一个文件夹。在每个打印机文件夹中,都有需要打印的文件 下面是我到目前为止的测试代码: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) {
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
?