I'm writing a code which produces the XPS file using WPF controls. Let's say 100 page document. As we know that since its using the WPF UI Elements it must be STA thread. Form the front end I have a web service which call the GenerateBook method in the class library module which generates the 100 page XPS file. The following section of code is working absolutely fine. but What I would like to make it the faster using the parallel programming. so I had converted the code with the below one but I have seen not effect on performance on quad core (4 CPU) machine. Is it true that the STA threads cannot be make run parallel or Where I'm doing wrong?
for (int pageNumber = from; pageNumber <= to; pageNumber++)
{
var pageVisual = paginator.GetPage(pageNumber - 1);
var page = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Width = fixedDoc.DocumentPaginator.PageSize.Width;
fixedPage.Height = fixedDoc.DocumentPaginator.PageSize.Height;
fixedPage.Children.Add(pageVisual);
((IAddChild)page).AddChild(fixedPage);
fixedDoc.Pages.Add(page);
}
...
after Parallel Programming
TaskScheduler taskUI = TaskScheduler.FromCurrentSynchronizationContext();
List<Task> tasks = new List<Task>();
for (int pageNumber = from; pageNumber <= to; pageNumber++)
{
int pageCounter = pageNumber;
var t = Task.Factory.StartNew(() =>
{
var pageVisual = paginator.GetPage(pageCounter - 1);
var page = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Width = fixedDoc.DocumentPaginator.PageSize.Width;
fixedPage.Height = fixedDoc.DocumentPaginator.PageSize.Height;
fixedPage.Children.Add(pageVisual);
((IAddChild)page).AddChild(fixedPage);
fixedDoc.Pages.Add(page);
}, CancellationToken.None, TaskCreationOptions.None, taskUI);
tasks.Add(t);
}
Any response would be much appreciated.