نمایش نتایج 1 تا 3 از 3

نام تاپیک: اشكال در تعامل threading و كنترل هاي ويندوزي

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    سحابي #C ستاره ي Java
    پست
    192

    اشكال در تعامل threading و كنترل هاي ويندوزي

    سلام من يه برنامه نوشتم كه از دو تا فرم تشكليل شده فرم اول فرم دوم را با متد Show() نمايش مي دهد تا قابليت حركت بين اين دو فرم فراهم شود. مادامي كه فرم اول كار خودشو انجام مي ده مي خوام كه فرم دوم يه سري اطلاعات رو از پايگاه بهم نشون بده مثلاً اگه فرض كنيم كه ما وارد فرم مدير شديم مي خوايم كه تو فرم دوم ميزان فروش يك ساعت پيش را ملاحظه كنيم. خب براي اين كار من مي خوام از threading استفاده كنم اما يه كمي دچار مشكل شدم. در واقع به نظر مدل كدينگم اشتباه است. حالا كمكي كه از شما مي خوام اينه كه كدا رو ببينيد بهم بگين براي اين كار بايد چه كار كنم. از راهنماييتون متشكرم.
    اين كد رويداد Load مربوط به فرم مدير:
        private void manager_Load(object sender, EventArgs e)
    {
    ManagerNotifyCost MNC = new ManagerNotifyCost();
    MNC.Show();
    }
    اينم كد مربوط به فرم ManagerNotifyCost
    يه نكته اينكه من تو اين كد من از دو تا ليبل (PlaceLablel,CostLabel) براي نمايش اطلاعات استفاده مي كنم.
    يه نكته ي ديگه اين فرم وقتي تك باشد به درستي اعمالش رو انجام مي ده ولي وقتي با اون متد show فراخواني مي شه ديگه درست كار نمي كنه:
        public partial class ManagerNotifyCost : Form
    {
    delegate void SetTextCallBack(string Cost, string Place);
    MySqlCommand Command = new MySqlCommand();
    MySqlConnection Connection=new MySqlConnection(/*my connection string*/);
    MySqlDataReader Reader;
    public ManagerNotifyCost()
    {
    InitializeComponent();
    }

    private void ManagerNotifyCost_Load(object sender, EventArgs e)
    {
    Thread ShowCost = new Thread(new ThreadStart(ShowingCost));
    ShowCost.Start();
    }

    private void SetText(string Cost, string Place)
    {
    if (PlaceLabel.InvokeRequired)
    {
    SetTextCallBack Text = new SetTextCallBack(SetText);
    this.Invoke(Text, new object[] { Cost, Place });
    }
    else
    {
    this.CostLabel.Text = "فروشگاه";
    this.PlaceLabel.Text = Cost;
    break;
    }
    }

    private void ShowingCost()
    {
    lock (this)
    {
    int Cost = 0;
    Command.Connection = library.Connection;
    while (this.Visible)
    {
    Connection.Open();
    Cost = 0;
    //this is a place that information retrieve from DB
    this.SetText(Cost.ToString(), "shop");
    Connection.Close();
    }
    }
    }
    }

  2. #2

    نقل قول: اشكال در تعامل threading و كنترل هاي ويندوزي

    آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
    آن لحظه،
    لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .

    برنولی

  3. #3
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    سحابي #C ستاره ي Java
    پست
    192

    نقل قول: اشكال در تعامل threading و كنترل هاي ويندوزي

    ببينيد من به اين موضوع كاملاً واقف هستم چون تويه كد خودم هم از اين روش استفاده كردم.اگر كمي دقت مي كرديد متوجه مي شديد مشكل اصلي زماني است كه ما با دو فرم كار مي كنيم و مي خواهيم اطلاعات فرم دوم را به همراه فرم اول نشان دهيم (اطلاعاتي كه همواره در حال تغيير است) وقتي فرم دوم نمايش داده مي شود (load مي شود( نخ فرم دوم شروع به كار مي كند و همزمان با آن نخ اصلي برنامه از روي فراخواني MNC.Show() گذر مي كند اما نخي كه در اين فرم قرار دارد هنوز در حال كار كردن است و اين باعث مي شود كه فرم دوم به حالت Not-Responding برود اما هنوز مي توان با فرم اول كار كرد.

قوانین ایجاد تاپیک در تالار

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