2

手動で再起動したときにアプリケーションがクラッシュする前に、以前の実行状態にアプリケーションを再開できるように、以前の変数の値を取り戻す方法を見つけようとしています。現在、プロジェクト フォルダーに保存されている「config」ファイルを使用しています。これを行うより良い方法はありますか?

保存したいコードの小さな部分。

if (EventID == WIA.EventID.wiaEventItemCreated)
        {
            if (d != null)
            {
                foreach (Property p in d.Properties)
                {
                    if (p.Name.Equals("Pictures Taken"))
                        Console.WriteLine("Taken");
                }

                wiaImageFile = (WIA.ImageFile)(d.Items[d.Items.Count].Transfer(FormatID.wiaFormatJPEG));
                wiaImageFile.SaveFile(Properties.Settings.Default.FolderNameRaw + "\\" + imageCount + ".jpg");
                imageCount++;//I want to save this count so that I can continue the sequence even after the application crashes
                Pluck.Default.PhotoExistsInDirectory = true;
                FacebookControls fbc = new FacebookControls();
                if(Properties.Settings.Default.UseFB == true)
                    fbc.UploadPhotos();


            }
        }
4

3 に答える 3

1

一般に、構成ファイルは良い答えです。通常、他のオプションはレジストリまたはデータベースですが、構成ファイルの方が安全なオプションであると私は主張します。

この情報を永続化すると、再びエラーが発生する可能性があるため、エラーが発生した場合は簡単に破棄できるようにする必要があります。ファイル (もちろんユーザー設定スペースに保存されます) は、おそらくそれを行う方法です。必要に応じて、ユーザーにファイルを削除するように指示できます。ユーザーがレジストリまたはデータベースにアクセスするのは、より複雑な修正です。

また、状態を適切なオブジェクトにラップし、状態オブジェクトを初期化し、構成ファイルを読み込まないためのメカニズムを持つ初期化ロジックを構築する必要があります。

于 2012-12-18T15:20:20.900 に答える
0

構成ファイルを使用します。また、すべての例外をキャッチし、アプリを閉じる前にすべてのファイル (ユーザーが作業中のファイルを含む) を保存する機会を提供するグローバル例外ハンドラーもあります。

また、アプリの失敗の原因となったデータを永続化できるという C Ross の意見にも同意します。すぐには戻らないもう 1 つのオプションは、タイマーまたはバックグラウンド プロセスを使用して定期的に設定を保持することです。Windows のシステム復元機能のように、いくつかのバックアップでこれを使用します。

于 2012-12-18T15:24:40.557 に答える
0

UnhandledException、Application_ThreadException、および Application.ApplicationExit イベントを処理し、そこにデータを保存してみてください。

http://www.switchonthecode.com/tutorials/csharp-tutorial-dealing-with-unhandled-exceptions

@Cとして。Ross氏によると、ユーザー設定ファイルは良い選択です。

もちろん、最初に実行時にアプリケーションの状態を何らかのオブジェクトに保存する必要があります。

于 2012-12-18T15:28:26.830 に答える