سؤال

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

لقد وجدت المثال التالي الذي يظهر (نحو أسفل الصفحة) كيفية كتابة نشاط لانتظار الوصول إلى ملف للوصول في دليل معين:

إنشاء أنشطة مخصصة مع سير العمل 4.0

لدي بعض المشاكل مع المثال. أولا، عندما أضيف التعليمات البرمجية التالية:

void FileCreated(object sender, FileSystemEventArgs e)
{
    instance.ResumeBookmark(bookmarkName, e.FullPath);
    fsw.Dispose();
}

instance.Resumebookmark(...) لا يبدو أن يكون متاحا ولكن instance.BeginResumeBookmark و instance.EndResumeBookmark نكون.

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

هل هذا حتى أفضل نهج لهذا النوع من الأشياء؟

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

المحلول

أود أن أقترح كتابة aynccodeactivity وتجنب الإشارات المرجعية تماما. فيما يلي مثال على نشاط مخصص يعيد رمز الخروج العملية كنتيجة:

    public sealed class RunProcess : AsyncCodeActivity<int>
    {
        public InArgument<string> FileName { get; set; }
        public InArgument<string> Arguments { get; set; }

        private Func<string, string, int> runProcessAsyncCall;

        protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
        {
            this.runProcessAsyncCall = this.RunProcessImpl;
            return runProcessAsyncCall.BeginInvoke(FileName.Get(context), Arguments.Get(context), callback, state);
        }

        protected override int EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
        {
            return this.runProcessAsyncCall.EndInvoke(result);
        }

        private int RunProcessImpl(string fileName, string arguments)
        {
            Process p = Process.Start(fileName, arguments);
            p.WaitForExit();
            return p.ExitCode;
        }
    }

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

نصائح أخرى

هذا النهج يعمل بشكل جيد تماما لتشغيل العمليات الأخرى. استخدم العملية .WATFOREXIT للتحقق عند الانتهاء من العملية، تحقق اختياريا exitcode., واستئناف المرجعية.

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