سؤال

لدي برنامج مع وضعين: واجهة المستخدم الرسومية & فقط تشغيل. يقوم واجهة المستخدم الرسومية بتحميل نموذج WPF ويتيح لي ضبط الإعدادات ، بينما فقط تشغيل الأحمال المذكورة وفقط ... حسنًا ... يعمل.

إنها أداة مجيدة وقابلة للتخصيص لتكوين الملفات.

المشكلة: "السجل" لا ينتهي. يبدو أنه لا يزال يكتب أثناء إغلاق البرنامج ، وبالتالي قطع نهاية السجل.

هيئة التطبيق الرئيسية:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        if (!e.Args.Contains("-gui"))
        {
            Process.SettingsPopulate();
            Process.WriteLogHead();
            Process.MoveFiles();
            Process.WriteLogEnd();
        }
        else
        {
            new MainWindow().ShowDialog();
        }
        this.Shutdown();
    }
}

بسيطة حقيقية. إذا كان سطر الأوامر -GUI ، فإنه يحمل WPF ... آخر يعمل فقط.

    public static void WriteLogEnd()
    {
        foreach (var log in from i in Items
                            where i.Used == false
                            let build = new StringBuilder()
                            select build.AppendFormat("{0, -12} > {1} > Not Found", _time, i.FileName))
        {
            Logs(log);
        }

        Logs("");
        Logs("Fin.");
    }

السجلات هي طريقة بسيطة "الكتابة إلى وحدة التحكم ، اكتب إلى ملف". أكرر من خلال قائمة الملفات المصنعة ، والعثور على عناصر غير مستخدمة ... ويعرف أيضًا باسم "غير موجود". قبل أن ينهي القائمة ، واكتب الزعنفة ، يتم إغلاقها.

جعلني في حيرة. كيف يمكنني منع الملف من الإغلاق قبل أن ينتهي WriteLogend (منذ ذلك الحين ، AFAIK ، لا ينبغي أن يكون قادرًا على إنهاء من قبل على أي حال).

هل كانت مفيدة؟

المحلول

السجلات هي طريقة بسيطة "الكتابة إلى وحدة التحكم ، اكتب إلى ملف".

إذا كتب إلى ملف ، فأضف logs.close () أو شيء من هذا القبيل. يجب عليك إغلاق FileStream لطرد ذاكرة التخزين المؤقت.

نصائح أخرى

قم بتشغيله في وضع سطر الأوامر في مصحح أخطاء لمعرفة ما إذا كان يتم طرح استثناء ، أو جرب .. احرص حول الكود في روتين OnStartup الخاص بك.

إذا لم يتم استثناء الاستثناء في أي موضوع لعملية ما ، يتم إنهاء العملية بأكملها فجأة.

تأكد أيضًا من إغلاق أي ملفات أو تدفقات تكتب السجل إليها. يتم تخزين معظم ملفات I/O في هذه الأيام ، وإذا لم تغلق الدفق بشكل صحيح ، فقد لا يتم الالتزام بقدرات المخزن المؤقت الأخير لبيانات الإخراج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top