سؤال

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

وكيف يمكنني تحميل البيانات من العرف؟ هل اجتاز العرف إلى طريقة اتصال مختلفة؟ هل هذا النهج بخير؟

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

شكرا لك، كايف

class Program
           {
                static void Main(string[] args)
                {
                    CustomClass customClass = new CustomClass();

                ThreadPool.QueueUserWorkItem(CallBack, "Hello"); 


                Console.Read();
            }

            private static void CallBack(object state)
            {
                customClass.SaveData(state.ToString());
            }
        }
هل كانت مفيدة؟

المحلول

class Program
{
  static void Main(string[] args)
  {
    CustomClass customClass = new CustomClass();
    ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello")); 
    Console.Read();
  }

  private static void CallBack(CustomClass custom, string text)
  {
    customClass.SaveData(text);
  }
}

نصائح أخرى

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

بالإضافة إلى ما قيل: إذا CustomClass تحت سيطرتك واستدعاء غير متزامن SaveData هي حالة الاستخدام المشتركة، يمكنك التفكير في توفير SaveDataAsync طريقة:

class CustomClass {

    public void SaveDataAsync(string path) {
        ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
    }

    public void SaveData(string path) {
        ...
    }
}

يرى النمط غير المتزامن يستند إلى الأحداث.

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