ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 12
  1. #1
    2011/03/18
    تهران
    574
    2

    مشکل در استفاده از لیست و کلاس با C#

    سلام
    یه نظر رو این میتونید بدید؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    توش یه کلاسه:
    کد:
    namespace Q
    {
      class test: Form1 
      {
        public string exp1()
        {
          return STR[index];
        }
      }
    }
    با این برنامه:
    کد:
    namespace Q
    {
      public partial class Form1 : Form
      {
        public List<string> STR;
        public UInt16 index;
        private test a;
        public Form1()
        {
          InitializeComponent();
          STR = new List<string>();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          string t ;
          t = textBox1.Text;
          STR.Add(t);
          MessageBox.Show(STR[index]);
          //index++;
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
          MessageBox.Show(a.exp1());
        }
      }
    }
    وقتی Button2 رو میزنم خطا میده.
    Object reference not set to an instance of an object.
    ;()((void (*)(void))0x0000))
  2. #2
    2008/09/02
    اصفهان
    1,897
    36

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    باید هم خطا بده. a رو که new نکردین. مقدار null داره.
  3. #3
    2011/03/18
    تهران
    574
    2

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    ممنون از توجهتون.
    من کجا a رو new کنم؟
    اگه اینجا:
    کد:
        public Form1()
        {
          InitializeComponent();
          STR = new List<string>();
          a = new test();      
        }
    new کنم هیچ اروری نمیده ولی اصلا برنامه بالا نمیاد!!!
    اگه هم تو فرو لودnew کنم، سراجرای تابع توی کلاسم میگه:
    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    یه دکمه هم جدا برای new کردن گذاشتم که سر اجرای برنامه اول اونو بزنیم و a ،new بشه، بازم سر همون تابع توی کلاس همون پیام بالارو میده.
    و لیست مارو خالی میکنه ، مشکل من همینه
    ;()((void (*)(void))0x0000))
  4. #4
    2008/09/02
    اصفهان
    1,897
    36

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    ببینم میشه بگی اصلا میخوایی چکار کنی؟ سورس رو توضیح نده. فقط مشکل رو بگو.
  5. #5
    2011/03/18
    تهران
    574
    2

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    لیستم رو توی فرم 1 تعریف کردم و پابلیک هم هست.
    یه کلاس جدا هم ساختم و گفتم که از فرم 1 ارث ببره.
    اینجوری باید بتونم از توی کلاسم به متغیر لیستم دسترسی داشته باشم که دسترسی دارم ولی میگه لیست خالیه! با این که پر هم هست.
    چه کار کنم تا لیستم خالی نشه؟
    ;()((void (*)(void))0x0000))
  6. #6
    2008/09/02
    اصفهان
    1,897
    36

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    اولا لیست تون رو باید readonly تعریف کنین که اشتباها از بیرون مقدار خود لیست عوض نشه. و یا بصورت زیر تعریف کنین:


    public readonly List<string> STR;


    یا

    public List<string> STR {get; private set;}


    اما من نمیفهمم چرا وقتی خود Form1 رو دارین کلاسی به اسم test ازش ارث میبره؟ خوب متد exp رو داخل Form1 تعریف کنین.

    تازه غیر از این؛ a باید در constructor مربوط به Form1 ابتدا new بشه.
    چون a.STR با Form1.STR یکی هست. منتهی مربوط به دو شیء متفاوت.
  7. #7
    2011/03/18
    تهران
    574
    2

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    راستش اصل برنامه من خیلی پیچیده تر از اینه ولی مشکلم اونجا همین مشکل اینجاست.
    اونجا من یه ترد دارم که تو این ترد در صورت تغییر یه چیزی یه ترد دیگه باید ایجاد بشه.
    و از اونجا که تعداد ترد هایی که ساخته میشه معلوم نیست و ترد هم یه تابع رو قبول میکنه و تابع هم نمیشه به صورت آرایه تعریف کرد، یه کلاس ساختم و تابع مورد نظر رو تو کلاس نوشتم و کلاسی که ساختم رو آرایه کردم. و من نیاز دارم تا با محتویات لیستم هم تو ترد هایی که تعدادشون معلوم نیست کار کنم هم تو همین ترد که ترد های دیگه رو میسازه و هم تو Form1 که ترد اولم تو Form1 هست و هیچ مشکلی باهاش ندارم ولی تو کلاسا این مشکل هست.
    public readonly List<string> STR;
    هم اعمال کردم ولی تاثیر نداشت.
    و متوجه نشدم a دقیقا کجا باید new بشه!، در حال حاضر تو Form load نیو کردمش.
    ;()((void (*)(void))0x0000))
  8. #8
    2008/09/02
    اصفهان
    1,897
    36

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    ببینم! نکنه میخوایین چیزی مثل سرویس بسازین؟ چرا از مکانیسم message pumping خود فرم استفاده نمیکنین؟ یا از ThreadPool؟ اینجوری کارتون بهتر راه میفته! راستی نمیتونین مشکل رو دقیقا شرح بدین؟ اینجوری فکر نکنم کارتون راه بیفته.
    اگر فکر میکنین اینجا نمیشه راجع بهش صحبت کرد بهم pm بدین.
  9. #9
    2011/03/18
    تهران
    574
    2

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    نه چیز خصوصی هم نیست.
    راستش یه چیزی تو مایه های سرور مسنجره.
    چندین کلاینت باید بتونن با این سرور ارتباط برقرار کنند از طریق سوکت، برای این کار یه متغیر از نوع TCPlistener تعریف کردم و یه لیست از نوع Socket و یه لیست دیگه از نوع NetworkStream و یه لیست از نوع BinaryReader و یکی دیگه از نوع BinaryWriter و یکی هم برا ترد ها از نوع Thread که بعد از Listener.Start(); ترد اول شروع به کار میکنه و به ترتیب هر ارتباط رو از طرف کلاینت ها تو یه خونه از لیست هایی که گفتم قرار میده که این وسط به ازای هر ارتباط یه ترد دیگه هم ساخته میشه تا BinaryReader از طرف هر کلاینت مدام چک بشه تا درخواستی که از طرف کلاینت میاد رو بتونیم پردازش کنیم و در آخر هم به متغییر اندیس لیستامون یکی اضافه می کنیم تا دوباره که ترد اجرا شد یه خونه دیگه از لیست هارو مقدار دهی کنه.
    همونطور که قبلا گفتم چون تعداد ترد هایی که وسط ترد اصلی ساخته میشن معلوم نیست یه لیست از ترد درست کردم و برای تابع درون ترد هم یه کلاس و لیستی از همون کلاس که به هر ترد ساخته شده باید میدادمش.
    برای BinaryReader داخل کلاس هم گفتم کلاس رو بگم که از فرم اصلی ارث ببره تا بتونم به اصل لیست BinaryReader دسترسی داشته باشم و فقط اندیس رو بهش بفرستم که اینجا برای بار اول به این مشکل برخوردم که با یه حرکت ساده حل شد، اما همین کارو میخواستم برای BinaryWriter انجام بدم که دیگه اون حرکتی که BinaryReader رو حل کردم به کارم نمیومد، مشکل BinaryReader رو با یه حرکت دستی حل کردم چون تو هر ترد فقط باید یک BinaryReader بررسی میشد اما تو همون ترد باید بشه به تمام BinaryWriter ها دسترسی داشت.
    که سر این به این مشکل رسیدم.
    حالا راه حل های دیگه ای اگه میشناسین که بهتر از این باشه ممنون میشم.
    ;()((void (*)(void))0x0000))
  10. #10
    2008/09/02
    اصفهان
    1,897
    36

    پاسخ : مشکل در استفاده از لیست و کلاس با C#

    با اجازه تون (با عرض معذرت) سوراخ دعا رو گم کردین! :mrgreen:
    معمولا یک سرور رو به این صورت پیاده میکنن:
    1- یک ترد برای اخذ درخواستهای کانال ارتباطی (اینجا TCP) ساخته میشه. این ترد هیچ کاری نداره جز اینکه درخواستها رو شناسایی کنه و اونها رو بفرم یک سوکت یا NetworkStream در یک queue قرار بده.
    2- یک تعداد ترد داریم (تعداد ثابت؛ مثلا 10 تا) که بهشون work-thread میگیم. اینا منتظر میشن تا وقتی یکی به queue اضافه بشه یکی یکی درخواستها رو بردارن و پردازش کنن و نتیجه رو به کلاینت ها ارسال کنن.
    اینجوری با توجه به اینکه TCP server socket دارای backlog هست و میتونه تعداد زیادی درخواست رو در حالت pending نگه داره مشکلی در رابطه با درخواست ها پیش نمیاد.

    البته برای اینکه پردازش درخواست ها مشکل نباشه و سیستم حداکثر سرعت رو پیدا کنه میتونین بجای ساختن ترد های کاری از ThreadPool به همراه AsyncProgramming استفاده کنین. اینجوری فقط یک thread دارین ولی به تمامی درخواست ها هم سرویس میدین.

    این منطق کلی سرور ها هست. اگر در پیاده سازیش مشکلی دارین بگین تا نمونه کد بذارم.
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 12

موضوعات مشابه

  1. پاسخ: 4
    آخرين نوشته: 2015/03/08, 00:53
  2. پاسخ: 53
    آخرين نوشته: 2014/06/18, 21:41
  3. طراحی و شبیه سازی تقویت کننده توان کلاس E با استفاده از تکنولوژی CMOS
    توسط iranhasti در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 8
    آخرين نوشته: 2013/08/11, 17:47
  4. مشکل در افزودن چند کامپوننت کلاس به فایل شماتیک
    توسط hamedhbb در انجمن نرم افزار Protel
    پاسخ: 0
    آخرين نوشته: 2012/10/16, 20:13
  5. لیست
    توسط azadmnesh در انجمن Matlab
    پاسخ: 4
    آخرين نوشته: 2010/11/11, 16:49

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •