我正在开发一个小工具,它将扫描一个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
调用的方法?
答案 0 :(得分:4)
在这里传递参数没有任何问题,但是Task.Factory.StartNew的返回类型是任务而不是字符串,这就是你得到编译时错误的原因。
我认为你需要
scanPrinterTasks[i] = Task.Factory.StartNew(() =>
ScanPrinterDir(printerName));
而不是
printerDirs[i] = Task.Factory.StartNew(() =>
ScanPrinterDir(printerName));