لماذا يتم تعليق الوظيفة الإضافية لـ VSTO Outlook الخاصة بي على التشغيل الأول؟

StackOverflow https://stackoverflow.com/questions/2172699

  •  24-09-2019
  •  | 
  •  

سؤال

لقد كتبت هذه ms outlook الصغيرة 2003 الوظيفة الإضافية VSTO باستخدام C# و Visual Studio 2008. ومن المفترض أن تحقق من كل عنصر بريد يتم إرساله لكلمة "إرفاق" في الجسم وإذا تم العثور عليه ، ثم تحقق من عدد المرفقات. إذا كان هذا الرقم صفرًا ، فاطلب من المستخدم إذا كان يعني حقًا إرسال الرسالة. من المفترض أن تعمل مثل ميزة Gmail Labs التي تفعل الشيء نفسه.

الشيء الغريب هو أنه يعمل ، لكن في المرة الأولى التي أقوم فيها بتشغيله ، أتوقف مؤقتًا ، مثل نافذة عنصر البريد معلقة لمدة 45 ثانية. بمجرد أن يتجاوز ذلك ، فإنه يمتد بسرعة كبيرة لبقية الوقت الذي أتفتح فيه Outlook. إذا أغلقت Outlook ، في المرة القادمة التي أعيد فتحها وأرسل رسالة ، سأتمكن من الانتظار مرة أخرى.

أي أفكار ، الشعوب؟

إليك رمز الوظيفة الإضافية الخاصة بي:

namespace OutlookAttacher
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        void Application_ItemSend(object Item, ref bool Cancel)
        {
            if (Item is Microsoft.Office.Interop.Outlook.MailItem)
            {
                Microsoft.Office.Interop.Outlook.MailItem currentItem = Item as Microsoft.Office.Interop.Outlook.MailItem;
                Cancel = true;

                if (currentItem.Body.Contains("attach"))
                {
                    if (currentItem.Attachments.Count > 0)
                    {
                        Cancel = false;
                        //MessageBox.Show("This message will be sent now.");
                        currentItem.Send();
                    }
                    else
                    {
                        DialogResult ans = MessageBox.Show("This message has no attachments. Are you sure you want to send it?", "OutlookAttacher", MessageBoxButtons.YesNo);
                        if (ans.Equals(DialogResult.Yes))
                        {
                            Cancel = false;
                            //MessageBox.Show("This message will be sent now.");
                            currentItem.Send();
                        }
                    }
                }
                else
                {
                    Cancel = false;
                    //MessageBox.Show("This message will be sent now.");
                    currentItem.Send();
                }
            }
        }
    }
}

أي اقتراحات لتحسين الكود موضع ترحيب أيضًا ، لأن هذه هي أول طعن لي في الوظيفة الإضافية في Outlook.

تحديث: أنا أدير هذا على جهاز كمبيوتر محمول من Dell لمدة 5 سنوات ، و 2 جيجابايت من ذاكرة الوصول العشوائي ، و I-Don-Neknd-الذي وحدة المعالجة المركزية Intel. أنا أحب فكرة إضافة تتبع / تصحيحه. سيتعين علي أن أذهب لمعرفة كيفية التدخل في الكود حتى أتمكن من معرفة أين قد يستغرق أطول وقت. شكرا لكم!

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

المحلول

حسنًا ، أنا محرج حقًا. كان التأخير الذي كنت أراه هو مجرد التزامن مع خادم Exchange الخاص بي. كنت في المنزل عندما كنت أختبر وكانت التوقعات لا تزال تتصل عبر HTTP. أراها تعمل بسرعة اليوم ، في المكتب ، لذلك لا HTTP. شكرا على الردود على أي حال.

:-)

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