== 引数のクラス化

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