با سلام
من یک سری اطلاعات رو میخوام توسط backGroundWorker باند کنم توی یه گرید ویو . این کار انجام میشه اما بعد از لود شدن دیتا در گرید ویو , فرم هنگ میکنه و دیگه نمیشه باهاش کاری انجام داد . میشه یه راهنمایی بدید که چطور میشه ؟
با سلام
من یک سری اطلاعات رو میخوام توسط backGroundWorker باند کنم توی یه گرید ویو . این کار انجام میشه اما بعد از لود شدن دیتا در گرید ویو , فرم هنگ میکنه و دیگه نمیشه باهاش کاری انجام داد . میشه یه راهنمایی بدید که چطور میشه ؟
سلام
برا این جور مشکلا باید کدتو هم بذاری دوستان ببینن و خطا رو پیدا کنن
در این حالت دیتا توی گرید لود میشه اما بلا فاصله فرم هنگ مینهکد HTML:private void button4_Click(object sender, EventArgs e) { bckdataload.RunWorkerAsync(); } private void bckdataload_DoWork(object sender, DoWorkEventArgs e) { dataset ds = Users.bindAll(); grid.datasource = ds.Tables[0]; }
عزیز اول اینکه توی DoWork به اشیا thread اصلی نمیتونی دسترسی داشته باشی ینی اینکه کلا ترد ها با هم نمیتونن به صورت مستقیم ارتباط برقرار کنن و باید از deligate ها استفاده بشه که backgroundworker کار رو خیلی راحت کرده
فرضض بر این که بشه همچین کاری کرد اگه قرار اینجوری گرید رو پر کنی که از ترد دیگه نیازی نیست استفاده کنی
شما باید توی رویداد DoWork اطلاعات رو بگیری و درون یک دیتاتیبل بریزی و دستور پر کردن گرید رو توی RunWorkerCompleted بنویسی
نمونه کد :
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
DataTable dt = new DataTable();
//... Fill dt from database
e.Result = dt;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DataGridView dgv = new DataGridView();
dgv.DataSource = e.Result as DataTable;
}