PDA

View Full Version : سوال: مشکل استفاده از Thread یا Background Worker برای بارگیری داده ها



totti_acmilan17
سه شنبه 08 مهر 1393, 10:13 صبح
من یه جدول در اس کیو ال دارم که تعداد رکوردهاش خیلی بالاست و چون tableadapter رو هم در لود فرم مقدار میدم که داده ها رو بگیره و در gridview نمایش بده خیلی طول میکشه و فرم دیر نشون میده به همین دلیل از background worker استفاده کردم تا فرم نشون بده و در پشت زمینه داده ها لود بشه اما خطا داره ، هر چی sample هم نگاه کردم متوجه نشدم دوستان لطف کنید کمک کنید اگه راه بهتری هم سراغ دارید ممنون میشم ؟؟؟

public OrderFRM()
{


InitializeComponent();
this.backgroundWorker1.RunWorkerAsync();
}


private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
this.ordersTableAdapter.FillByFinancialPeriodFK(th is.oxygenDataSet.Orders, PublicClass.FinancialFK);




}
catch (Exception x)
{
MessageBox.Show(this, x.Message + "\n" + x.StackTrace, x.TargetSite.Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

abbas.oveissi
سه شنبه 08 مهر 1393, 12:33 عصر
ننوشتین چه خطایی داده ولی احتمالا دلیلش این بوده که از داخل ترد به UI دسترسی ندارید.

totti_acmilan17
سه شنبه 08 مهر 1393, 13:56 عصر
ننوشتین چه خطایی داده ولی احتمالا دلیلش این بوده که از داخل ترد به UI دسترسی ندارید.
جالب اینه که این خطا رو میده
Exception has been thrown by the target of invocation
و روی line ی که برنامه در program.cs رو اجرا میکنه وا میسته
البته اگه جزئیات بیشتری مورد نیازه تو سایت stackowerflow هم گذاشتم

http://stackoverflow.com/questions/26085363/filling-tableadapter-with-background-worker-in-form-initialize?noredirect=1#comment40908549_26085363

لطفا اگه نمونه کدی که این کار رو انجام بده دارید به اشتراک بزارید ممنون میشم کارم واقعا گیره !!

sh
یک شنبه 24 مرداد 1395, 12:57 عصر
من دقیقا کد مشابه شما را نوشته ام و فقط

backgroundWorker1.RunWorkerAsync();

را در رویداد لود فرم گذاشته بودم ولی کامبوباکس از اطلاعات لود شده پر نمی شد.

در لینک زیر یک راه حل و فایل پروژه قرار داده شده است

http://arsalantamiz.blogspot.ca/2008/09/asynchronous-data-loading-using.html

در مثال موجود در لینک ارائه شده ، با استفاده از متد ResetBindings در رویداد RunWorkerComplete مشکل حل شده که من در این متد کدهای زیر را نوشتم و مشکل حل شد
[CSHARP] comboBox1.DataSource = fDBDataSet.Users;
comboBox1.DisplayMember = "username";
comboBox1.ValueMember = "userid";
/CSHARP]

ژیار رحیمی
یک شنبه 24 مرداد 1395, 16:29 عصر
http://barnamenevis.org/showthread.php?200544-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Backgroundworker&p=890982&viewfull=1#post890982