• 1397/09/23

task.Run :

سلام به همه 

من در فرم لود برنامه خودم همچین کدی رو زدم

private async void Form1_Load(object sender, EventArgs e)
        {
            await Task.Run(() =>
            {
         
            Phone_dbEntities phone_DbEntities = new Phone_dbEntities();
            dataGridViewX1.DataSource = phone_DbEntities.Shomares.ToList();
        }

که با خطا مواجه شدم

 NameValueType
 Message"Cross-thread operation not valid: Control 'dataGridViewX1' accessed from a thread other than the thread it was created on."string

و کد رو به این تغیر دادم

private async void Form1_Load(object sender, EventArgs e)
        {
            await Task.Run(() =>
            {
                Phone_dbEntities phone_DbEntities = new Phone_dbEntities();
                dataGridViewX1.Invoke(new Action(() => { dataGridViewX1.DataSource = phone_DbEntities.Shomares.ToList(); }));
            });
                   }

خطا بر طرف شد منتها تا زمانی که اطلاعات رو از دیتابیس بخونه و نمایش بده فرم قفل می شه و دقیقا مثل حالتی میشه که از async , await استفاده نکنی آیا این درسته یا من اشتباه نوشتم ممنون میشم راهنماییم کنید با تشکر

  • 1397/09/23
  • ساعت 19:58

سلام

برای اینکار در ویندوز فرم بهتره از background worker استفاده کنید

 

استفاده از Background Worker در #C


logo-samandehi