== 引数のクラス化 RenderDoc() :メインの呼び出し RenderPage() :ページ毎の処理。画像やHashも作成(選択) RenderDocCompare(): メインの比較モード RenderPageStream() : Compare時に呼び出す。Streamのみで、画像作成、Hash値は上位で実装するようにした。 → RenderPage()もRenderPageStreamにして、RenderDoc()側で画像生成もあり → 複数PDFの処理は更にプログラムメインでPallarelで処理 → asyncのスレッド処理はRenderDoc/RenderDocCompareでページの並行処理で使う == 引数クラス * スレッドを考えると書き換える情報はクラスに含めてはいけない pegeN,Hashを除くべき . まとめたクラスパラメータ → 結論:Render条件パラメータのみクラス化すべき→Hashでできているのかな? class RenderParams { // 基本操作パラメータ string inPdfPath;//="" 対象PDF,ディレクトリはProgram側で対処 string inRefPdfPath; 比較モードのみ。そのPDFパス string inOutputDir; //= "", 画像やハッシュの出力先が必要な場合 // Doc処理の操作パラメータ string inPageRange;// = "1-*", bool bSaveImage;// = true, //画像出力を伴う場合のみ bool bHash;// = false, //ハッシュ値が必要な場合のみ UtHash.HashDataxk inHashData=null //出力ハッシュコンテナ string inMode;// = "pageBitMap", // デバッグ用 // Render条件パラメータ(すべてにほぼ必要) { double inDpi; //= 9.0, string inImageType; //= "JPG", int inJpegQ; = //0, string inBoxType;// = "Crop", } } class RenderParams { string inPdfPath;//="" string inOutputDir; //= "", double inDpi; //= 9.0, string inImageType; //= "JPG", int inJpegQ; = //0, string inBoxType;// = "Crop", string inPageRange;// = "1-*", string inMode;// = "pageBitMap", bool bSaveImage;// = true, bool bHash;// = false, UtHash.HashDataxk inHashData=null } // RenderPdfDocCompare string inPdfPath, // pdfもしくはディレクトリの場合あり→無い!pdfのみで、program側のループでディレクトリ展開 string inRefPdfPath, string inDir = "", // 結果の出力先 未使用。diff画像が生成が未達成なのでその時の出力先とすべき double inDpi = 9.0, string inImageType = "JPG", int inJpegQ = 0, string inBoxType = "Crop", string inPageRange = "1-*", string inMode = "pageBitMap", bool bHash = false, UtHash.HashDatax inHashDataTgt=null, UtHash.HashDatax inHashDataRef=null // RenderPage // Need: PdfDocument inPdfDoc, // Need GetPage() only. (Total page number); // 総ページ数のためだけに必要。あってもいいでしょう PdfPage inPdfPage, // Target Page Data(page.index:0-x) string inOutputPath,// Imageのパス string inOutputDir = "",// これ必要?→不要が確定 ref string inOutputHashCode, // ページハッシュコード出力の受け取り // Optional: double inDpi = 72.0, string inEncName = "JPG", //画像フォーマット、Saveのときのみ int inJpegQ = 91, string inBoxType = "Crop", bool bSaveImage = true,// ファイル保存有無。ハッシュ値計算のみのときにfalseにする bool bHash = false // RenderPageStream // Need: PdfDocument inPdfDoc, // Need GetPage() only. (Total page number); PdfPage inPdfPage, // Target Page Data(page.index:0-x) string otPath, // 不要確定 // Optional: double inDpi = 72.0, string inBoxType = "Crop" // 出力画像であるJpeg,EncNameが不要 // == 排他制御関係 #if COMMNET http://espresso3389.hatenablog.com/entry/20080827/1219787248 安全なMutex ということで、次のようなラッパークラスを作った。 class SessionLock : IDisposable { public SessionLock(string mutexName) { m_mutex = new Mutex(false, mutexName); m_mutex.WaitOne(); } public void Dispose() { try { m_mutex.ReleaseMutex(); m_mutex.Close(); } catch { } } Mutex m_mutex; } これならば、 using System; using System.Threading; namespace MutexTest { ... public class MutexTest { public static void Main() { using (new SessionLock("Hello, world")) { Console.WriteLine("Hey, I'm in the protected world!"); Thread.Sleep(10000); Console.WriteLine("..."); } } } } #endif == 2020/5/31 WCF+SortedDictionaryで一旦動作した。 残件:: * Compare * help * 共通化 * 強制終了 * BaseHashの調整 * 標準出力 * WCFのデータ整理 * WCFのジェネリック化 * namespace * vim