将参数传递到.NET中的Task.Factory.StartNew
本文关键字:Task Factory StartNew 中的 NET 参数传递 | 更新日期: 2023-09-27 18:25:15
我正在开发一个小型实用程序,它将扫描一个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
}
}
}
当我试图编译这个时,我得到了以下错误:
严重性代码描述项目文件行错误CS0029无法将类型"System.Threading.Tasks.Task"隐式转换为'string'PrintTest C:''Users''Latheesan''Desktop''PrintTest''PrintTest ''Program.cs 34
如何将参数传递给Task.Factory.StartNew
调用的方法?
在这里传递参数没有错,但是Task.Factory.StartNew的返回类型是Task,而不是字符串,这就是为什么会出现编译时错误的原因。
我想你需要
scanPrinterTasks[i] = Task.Factory.StartNew(() =>
ScanPrinterDir(printerName));
而不是
printerDirs[i] = Task.Factory.StartNew(() =>
ScanPrinterDir(printerName));