我写了一些代码,通过iText7将tiff文件转换成pdf文件。但是当我启动它时,它在方法image.imageDataFactory.createTIFF
上有死锁。如果将parallel.foreach替换为foreach则所有工作都正确。我做错了什么?
void Run(List<string> tiffsPaths)
{
Parallel.ForEach(tiffsPaths, ConvertTiffToPdf)
}
void ConvertTiffToPdf(string tiffPath)
{
var fileName = Path.GetFileNameWithoutExtension(tiffPath);
var pdfPath = Path.Combine(this.outputPicPath, fileName + ".pdf");
var pdfWriter = new PdfWriter(pdfPath);
var document = new PdfDocument(pdfWriter);
var workDir = Path.GetDirectoryName(SourceFile) ?? string.Empty;
var pageNum = 1;
var tiffImage = Image.ImageDataFactory.CreateTiff(new Uri(tiffPath), true, pageNum, true);
var tiffPageSize = new Geom.Rectangle(tiffImage.GetWidth(),
tiffImage.GetHeight());
var newPage = document.AddNewPage(new Geom.PageSize(tiffPageSize));
var canvas = new PdfCanvas(newPage);
canvas.AddImage(tiffImage, tiffPageSize, false);
document.Close();
pdfWriter.Close();
}
UPD在itext.io.source.RandomAccessSourceFactory
类的方法Public IRandomAccessSource CreateSource(Uri url)
中找到了IText7源代码中发生死锁的地方。这里有这部分代码:
WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultCredentials;
Stream isp = wr.GetResponse().GetResponseStream();
将var tiffImage=image.imageDataActory.CreateTIFF(新Uri(tiffPath),true,pageNum,true);
替换为var tiffImage=image.imageDataActory.CreateTIFF(file.ReadAllBytes(path),true,pageNum,true);
并且所有操作都很好
本文向大家介绍如何在PowerShell foreach并行循环中使用PSCustomObject?,包括了如何在PowerShell foreach并行循环中使用PSCustomObject?的使用技巧和注意事项,需要的朋友参考一下 要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。 因此,让我们看看是否可以在$out变量中存储或更改值。 示例
我需要修改下面的代码,以使用循环与常规foreach循环。 我遇到的问题是将对象传递给foreach循环。我刚开始使用循环-有没有人对此有一些信息? 当前代码 问题是列表将包含3000+项,循环将循环每一项,我需要并行地运行它们。 因此,我想使用函数,但我无法通过传递对象来使其工作。
问题内容: 使用以下代码显示我的Twitter个人资料中的朋友列表。我想一次只加载一个特定的数字,例如20,然后在底部为第1-2-3-4-5页的页面提供分页链接(但是,除以限制) **更新**** 这项工作有效,只需要抵消从开始的输出即可。在想什么? 问题答案: 一个非常优雅的解决方案是使用:
问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预
问题内容: 我正在尝试编译以下代码: 我在for行中看到一条错误消息: 该方法返回一个(但在这种情况下,返回的结构)。 是我为应用程序创建的枚举(在另一个类文件-中)。 当我在中创建具有相同结构的foreach循环时,我没有遇到此问题。 我究竟做错了什么? 问题答案: 一种更有效的方法: 如果有可能,请定义“ getData”,以便您不需要强制转换。
我使用的php foreach语句如下所示: