0

私はWindowsサービスを持っています。そして、サービスの開始時に以下の関数が呼び出されます。

static public void SaveXpsPageToJpeg(string xpsFileName, int[] pages){
    using (XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read)){
        FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence();
        DocumentPaginator paginator = docSeq.DocumentPaginator;

        // You can get the total page count from docSeq.PageCount

        foreach(int pageNum in pages){
            using (DocumentPage docPage = paginator.GetPage(pageNum)){
                BitmapImage bitmap = new BitmapImage();
                RenderTargetBitmap renderTarget =
                    new RenderTargetBitmap((int)docPage.Size.Width,
                    (int)docPage.Size.Height,
                        96, // WPF (Avalon) units are 96dpi based
                        96,
                        System.Windows.Media.PixelFormats.Default);

                renderTarget.Render(docPage.Visual);

                JpegBitmapEncoder encoder = new JpegBitmapEncoder();  // Choose type here ie: JpegBitmapEncoder, etc
                encoder.Frames.Add(BitmapFrame.Create(renderTarget));

                using (FileStream pageOutStream = new FileStream(xpsDoc + ".Page" + pageNum + ".jpg", FileMode.Create, FileAccess.Write)){
                    encoder.Save(pageOutStream);
                    pageOutStream.Close();
                }
            }
        }
    }
}

同じコードが WPF アプリケーションで完全に実行されます。しかし、サービスで同じものをデバッグすると、例外がスローされます

例外と内部の詳細のスクリーンショットも追加しました

http://imageshack.us/photo/my-images/62/97453717.png/

http://imageshack.us/photo/my-images/850/95569721.jpg/

構成マネージャーでX64、X86、およびAnyCPUも変更してみました

Visual Studio 2010、.Net Framework 4 を使用しています

誰でもここで助けてもらえますか

4

1 に答える 1

0

私は自分で解決策を見つけなければなりませんでした。

Visual Studio で作成されたほとんどのプロジェクトは、既定で MTA に設定されています。コードを STA スレッド内で実行する必要がありました。

ついに...!

于 2013-04-12T04:16:35.240 に答える