2014年9月28日 星期日

診間報到系統-2(BackgroundWorker)

由於我們報到系統的USB延長線有10米長,很容易就需要重新插拔USB接頭,間接daemon的程式就很容易死掉。所以,打算改寫daemon的程式,希望能多一些錯誤控制但又不想用timer去寫程式(內心覺得有點low ~ 哈)。最後,用BackgroundWorker模擬像是daemon的運作方式 ~

public class SmartCardLite
{
    // 讀取健保卡基本資料
    public static void ManualSmartCardDetection()
    {
        ...
    }

    private static BackgroundWorker _worker;

    public static void StartAutoSmartCardDetection()
    {
        _worker = new BackgroundWorker();
        _worker.WorkerSupportsCancellation = true;
        _worker.DoWork += WaitChangeStatus;
        _worker.RunWorkerAsync();
    }

    public static void StopAutoSmartCardDetection()
    {
        _worker.CancelAsync();
        _worker.Dispose();
    }

    private static void WaitChangeStatus(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker bwAsync = sender as BackgroundWorker;

        while (!bwAsync.CancellationPending)
        {
            ManualSmartCardDetection();

            Thread.Sleep(5000);
        }
    }

}

沒有留言:

張貼留言