আরকজিআইএস 10 অ্যাড-ইন: শীর্ষ স্তরের ব্যতিক্রম হ্যান্ডলিং


10

আরকজিআইএস 10 অ্যাড-ইন আমি কাজ করছি এটি খুব সহজ - কেবল একটি সরঞ্জাম নিয়ন্ত্রণ এবং একটি ডকযোগ্য উইন্ডো। উত্সটিতে উপস্থিত হওয়া এবং আমি সমস্ত কিছু ছুঁড়ে ফেলার প্রত্যাশিত নির্দিষ্ট ব্যতিক্রমগুলি আমি পরিচালনা করছি, তবে অ্যাড-ইন ফ্রেমওয়ার্কে সেই অপ্রত্যাশিত ব্যতিক্রমগুলি পরিচালনা করার জন্য সেরা অনুশীলন কোনটি?

আমি বর্তমানে কেবল একটি করছি catch (System.Exception ex)এবং এটি প্রতিটি পদ্ধতিতে একটি বার্তাবক্সে দেখিয়েছি যার উচ্চতর স্তরের পদ্ধতিটি আমি এটি পরিচালনা করতে পারি না তবে এটি সেরা অনুশীলনের মতো বলে মনে হয় না (এবং অবশ্যই, এফএক্সকপ ঝকঝকে করছে এটি সম্পর্কে)।

শীর্ষ-স্তরের ব্যতিক্রম হ্যান্ডলারটি আঁকানোর জন্য আর্কজিআইএস 10 অ্যাড-ইন ফ্রেমওয়ার্কে কি কোনও সুবিধা আছে, উদাহরণস্বরূপ Application.ThreadExceptionবা AppDomain.UnhandledExceptionইভেন্টগুলিতে?

অ্যাড-ইনগুলি কেবল ক্লাসের লাইব্রেরি হিসাবে দেখা এবং অন্তর্নিহিত অ্যাপ্লিকেশনটির স্টার্টআপ কোডটিতে অ্যাক্সেস নেই এমন অ্যাপ্লিকেশন নয় (আমি যা সংগ্রহ করি তা থেকে, সেই অনুষ্ঠানগুলি প্রারম্ভকালে খুব শীঘ্রই আঁকতে হবে), আমার অনুমান নেই, তবে আমি ভেবেছিলাম অ্যাড-ইনগুলিতে কীভাবে "অপ্রত্যাশিত" ব্যতিক্রমগুলি পরিচালনা করা উচিত সে সম্পর্কে কোনও বিশেষজ্ঞের কোনও পরামর্শ থাকলে আমি জিজ্ঞাসা করব।


1
জাস্ট এফআইআই: এখানে এগ্রি থেকে কিছুটা স্থির করার চেষ্টা করা একটি লিঙ্ক এখানে রয়েছে
এরিক এল

@ blah238 আপনার সমস্যা সমাধানের জন্য আপনি কী করেছেন? অনুগ্রহপূর্বক আমাকে ব্যতিক্রমহীন ব্যতিক্রমগুলি পরিচালনা করতে কিছু পয়েন্টার দিতে পারেন?
এমি

আপনার কোডে প্রতিটি প্রবেশের পয়েন্টে একটি ব্যতিক্রম হ্যান্ডলার রাখুন।
blah238

প্রতি এন্ট্রি পয়েন্টে? !! শীর্ষ স্তর থেকে এটি পরিচালনা করার অন্য কোনও উপায় নেই?
এমি

হ্যাঁ, এটা আমার বোঝাপড়া। আপনি যদি এই উন্নতি দেখতে চান তবে উপরের @ বেনস লিঙ্কটি দেখুন।
blah238

উত্তর:


7

আমি যতদূর বলতে পারি যে ত্রুটিটি পরিচালনা করার ক্ষেত্রে ইএসআরআই বর্তমানে সেরা অনুশীলন হিসাবে উপস্থিত রয়েছে তা পরিচালনা করছে। আপনি যদি অ্যাপ্লিকেশনটির ( আর্কম্যাপ ) অনিচ্ছাকৃত ব্যতিক্রমগুলি ধরে রাখেন তবে আপনি সম্ভবত নিজের অ্যাডআইনের অংশ না থাকা ত্রুটিগুলি সম্পর্কে বার্তা প্রদর্শন করতে পারেন। AddIns আপনি লিখতে অধিকাংশই সম্ভবত বাটন হতে যাচ্ছে এবং যারা সত্যিই শুধুমাত্র দুটি প্রধান রুট যে অপ্রত্যাশিত ত্রুটি কট অ্যান্ড প্রদর্শন করা হবে (আছে onClick এবং onUpdate )।

কেবল ' থ্রো প্রাক্তন ' এর পরিবর্তে ' নিক্ষেপ ' ব্যবহার করা মনে রাখবেন । এক মিনিটের পার্থক্য রয়েছে, তবে ত্রুটির বংশ ধরে রাখার ফলে এটি ডাকা ফাংশন থেকে বুদবুদ হয় results


ধন্যবাদ, সমস্ত ইএসআরআই নমুনাগুলি একইভাবে করায় আমি এটিকেই প্রত্যাশা করি।
blah238

@ ট্রয় শমিট আপনি কি দয়া করে আমাকে যখন ডকএল উইন্ডোটি ব্যবহার করছেন সে সম্পর্কে একটি পয়েন্টার দিতে পারেন, আমি কীভাবে হাতছাড়া হওয়া ব্যতিক্রমগুলি পরিচালনা করতে পারি? এবং কোথা থেকে এবং আমার "নিক্ষেপ" করা উচিত?
এমি

2

আমি একটি আরকজিআইএস অ্যাড-ইন নিয়ে কাজ করছি। আমার অ্যাড-ইনটিতে একটি ডকেবল উইন্ডো এবং একটি সরঞ্জাম নিয়ন্ত্রণ রয়েছে। আমি আমার সরঞ্জামটির কারণে আর্কজিআইএস ক্রাশ লগ করার চেষ্টা করছি। এবং আমি অ্যাপ্লিকেশন.ট্রেডএক্সসেপশন ব্যবহার করে শীর্ষ-স্তরের ব্যতিক্রম হ্যান্ডলিংয়ে কিছুটা সাফল্য পেয়েছি। যেহেতু থ্রেড ব্যতিক্রম কেবল ইউআই থ্রেডের জন্য কাজ করে, ডকযোগ্য উইন্ডোটি ইনস্ট্যান্ট করার পরে, কোনও ব্যতিক্রম যা আর্কজিআইএস ক্র্যাশ হওয়ার কারণ হতে পারে, এটি ধরা পড়ে, তবে ডকযোগ্য উইন্ডোটি ইনস্ট্যান্ট করার আগে এটি কাজ করে না।

    public class AddinImpl : ESRI.ArcGIS.Desktop.AddIns.DockableWindow
    {
        private WatershedDelineationDockableWindow m_windowUI;

        public WatershedDelineationDockableWindow GetUI
        {
            get
            {
                return m_windowUI;
            }
        }

        public AddinImpl()
        {
            Application.ThreadException += MYThreadHandler;
            Log.Info("Creating dockable window.");
        }

        static void MYThreadHandler(object sender, ThreadExceptionEventArgs e)
        {
            Log.Error("unhandled error in thread " + e.Exception.ToString());
            MessageBox.Show("unhandled error in thread " + e.Exception.ToString());
        }

        protected override IntPtr OnCreateChild()
        {
            m_windowUI = new WatershedDelineationDockableWindow(this.Hook);
            return m_windowUI.Handle;
        }

        protected override void Dispose(bool disposing)
        {
            if (m_windowUI != null)
                m_windowUI.Dispose(disposing);

            base.Dispose(disposing);
            Log.Info("Closing dockable window ");
        }
    }

এটি ইউআই ইনস্ট্যান্টিয়েট করার পরে শীর্ষ-স্তরের ব্যতিক্রম পরিচালনা করে


আকর্ষণীয়, আপনার অনুসন্ধান পোস্ট করার জন্য ধন্যবাদ। আমি এই সঙ্গে চারপাশে খেলতে হবে। বিশেষত, আমি অবাক হই যে ডকযোগ্য উইন্ডোটি সত্যই প্রয়োজনীয় কিনা বা এটি কোনও এক্সটেনশনে সেট আপ করা যেতে পারে।
blah238

@ blah238 থ্রেড E এক্সপশনটিও কাজ করে যখন আমি এটিকে বোতামের অনক্লিক পদ্ধতিতে রাখি। আমি মনে করি এটি ইউআইয়ের সাথে যোগাযোগ করে এমন কোনও নিয়ন্ত্রণের জন্য কাজ করে।
এমি 17'13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.