PDA

View Full Version : نمایش فرایند اجرا بدون هنگ کردن



mandanim
چهارشنبه 13 اسفند 1393, 00:16 صبح
سلام دوستان
یه مشکل ساده داشتم
ممنون میشم کمکم کنید
129065
من یه حلقه بطور مثال 1000000000 دارم
می خوام هر بار حلقه اجرا میشه شمارنده رو تو label نمایش بده
زمانی هم که رو فرمم کلیک میکنم فرم کارشو همچنان انجام بده
مشکل من یکی اینه که اصلا تو لیبل نمایش نمیده
دوم اینکه اگه رو فرم کلیک کنم فرم میره تو حالت هنگ
ممنون میشم کمکم کنید

Mofid.m
چهارشنبه 13 اسفند 1393, 06:40 صبح
از backgroundWorker استفاده کن

nila.CS
چهارشنبه 13 اسفند 1393, 13:58 عصر
منم همین مشکل رو داشتم تو برنامه یه لیبل دارم و یه دیتا تیبل به دیتا گرید ویو اختصاص میدم
private void button2_Click(object sender, EventArgs e)
{
.
.
.
dataGridView1.DataSource = dt;
.
.
.
label1.Text =”a string”;
}




یه thread تعریف کردم و کد رو با thread اجرا کردم




private void button2_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(f1));
newThread.SetApartmentState(ApartmentState.STA);
newThread.Start();
{
private void f1()
{
.
.
this.BeginInvoke((System.Windows.Forms.MethodInvok er)delegate() {dataGridView1.DataSource = dt;});
.
.
.
this.BeginInvoke((System.Windows.Forms.MethodInvok er)delegate() {label1.Text =”a string”;});

}


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

nila.CS
چهارشنبه 13 اسفند 1393, 14:35 عصر
البته با دستور this.Refresh() بدون thread مشکلو حل کردم ولی میخوام بدونم چرا بدون thread دیتا گرید ویو درست مقدار دهی میشه ولی وقتی کد توسط یه thread اجرا میشه دیتا گرید ویو درست مقدار دهی نمیشه؟ قبل ار مقدار دهی دیتا گرید ویو یه کانکشن به فایل اکسل دارم که اطلاعات اون فایل رو تو دیتا گرید ویو میریزم شاید کانکشن با thread مشکل داره البته هیچ اروری نمیده

mandanim
چهارشنبه 13 اسفند 1393, 23:36 عصر
دوستان کسی تا بحال با این مشکل برخورد نکرده
ممنون میشم کمکم کنید

محمد رضا فاتحی
پنج شنبه 14 اسفند 1393, 08:24 صبح
بفرمایید فقط با VS2010 نوشتم

ebrahim.rayatparvar
چهارشنبه 30 اردیبهشت 1394, 15:38 عصر
اگه برای نمایش میگی؟؟؟
که بعد کدی که مقدار داخل label میریزی یک خط کد زیر رو اضافه کن درست میشه.


Application.DoEvents();

ghasem110deh
چهارشنبه 30 اردیبهشت 1394, 16:16 عصر
اگه برای نمایش میگی؟؟؟
که بعد کدی که مقدار داخل label میریزی یک خط کد زیر رو اضافه کن درست میشه.


Application.DoEvents();


این خط چیکار میکنه !؟

ebrahim.rayatparvar
چهارشنبه 30 اردیبهشت 1394, 16:48 عصر
سلام.
مقدار حافظه که داره هی زیاد میشه رو سریعا اجرا میکنه .
یه کاری بکن یه برنامه بنویس تو فرم یه textbox بزار بعد یه button هم بزار تو دکمه یه حلقه for بزار از 1 بره تا 9999999 میبینی که برنامه اجرا می کنی عدد آخر رو تو تکس میبینی ولی دقیقا زمانی که مقدار رو به تکس دادی خطی که بالا نوشتم رو اضافه کن. میبینی تمام اعداد با صورت داره نمایش داده میشه این یه مثال ساده بود ولی دستورش خیلی کاربردیه.