PDA

View Full Version : سوال: هنگ کردن برنامه



ali.rk
چهارشنبه 29 خرداد 1392, 17:32 عصر
بازم سلام من یه برنامه برای مقسوم علیه ساختم . گذاشتم . وقتی یه عدد بزرگ بهش می دیدی (not responding) رو می نویسی و اگر صبر کنی می یاد چگونه می تونم پیقام انتضار بسازم و عدد استفادی هم را بزرگ تر کنم .
اگه مشکلی داشت بگین

lootiamir
چهارشنبه 29 خرداد 1392, 19:48 عصر
باید از BackGroungWorker استفاده کنید!!
این سورس رو یکی از دوستان همین سایت اولین بار که میخواستم کار با بک گراند رو یاد بگیرم بهم داد
بهتر از هر جایه دیگه متوجه شدم
امیدوارم بدردت بخوره!
105819

ali.rk
چهارشنبه 29 خرداد 1392, 21:31 عصر
ممنونم ... من از visual studio 2012 استفاده می کنم موقع بالا اومدن این برنامه ارورو می ده .... خودم دنبالش می گردم ... ناراحت نباش خیلی کمکم کردی .... انگلیسی هم خوبه در سایت خارجی هم می گرد .

maxvel
چهارشنبه 29 خرداد 1392, 23:08 عصر
نیازی به گشتن نیست

یه background worker بذار از منوی toolbox


و تو button این کد رو بذار


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub

حالا رو backgroundworker که گذاشتی 2بار کلیک کن و کدتو بذار اونجا! به راحتی و بدون هنگ اجرا میشه

موفق باشی

ali.rk
چهارشنبه 29 خرداد 1392, 23:52 عصر
دستتون درد نکنه ولی من با یه مشکل دیگه مواجه شدم

PrivateSub BackgroundWorker1_DoWork(sender AsObject, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim a AsInteger
Dim fi
a = TextBox1.Text
RichTextBox1.Text = "{ "
For fi = 1 To a
If RichTextBox1.Text = "{ "Then
RichTextBox1.Text = RichTextBox1.Text & fi
Else
If a Mod fi = 0 Then
RichTextBox1.Text = RichTextBox1.Text & " & " & fi
EndIf
EndIf
Next
RichTextBox1.Text = RichTextBox1.Text & " }"
Timer1.Enabled = False
If Label1.Visible = TrueThen
Label1.Visible = False
EndIf
EndSub

زمانی که اجرا می کنم ارور میده (richtextbox) کل برنامه رو هم براتون گذاشتم

maxvel
پنج شنبه 30 خرداد 1392, 00:03 صبح
کلا background worker رو بردار و دستور for اینجور بذار


imports System.Threading


Dim a As Integer
Dim fi
a = TextBox1.Text
RichTextBox1.Text = "{ "
For fi = 1 To a
System.Threading.Thread.Sleep(1000)
If RichTextBox1.Text = "{ " Then
RichTextBox1.Text = RichTextBox1.Text & fi
Else
If a Mod fi = 0 Then
RichTextBox1.Text = RichTextBox1.Text & " & " & fi
End If
End If
Next
RichTextBox1.Text = RichTextBox1.Text & " }"
Timer1.Enabled = False
If Label1.Visible = True Then
Label1.Visible = False
End If

نشد بگو

ali.rk
پنج شنبه 30 خرداد 1392, 00:05 صبح
ببین با این حل میشه؟؟

تو form load اینو بذار


BackgroundWorker1.WorkerReportsProgress = True

نشد بگو
نه حل نشد می شه یه بار backgroundworker رو توضیح بدی چیه

maxvel
پنج شنبه 30 خرداد 1392, 00:26 صبح
کد اصلاح شد

backgroundworker یه کمپوننت هست که vs به صورت پیشفرض اون رو داره!

که یه عملیات سنگین رو در یه زمان خاص انجام میده

maxvel
پنج شنبه 30 خرداد 1392, 00:31 صبح
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then
MsgBox(".عددی وارد نشده", MsgBoxStyle.Critical, "non_Text ERROR")
Else
BackgroundWorker1.RunWorkerAsync()
Timer1.Enabled = True
Dim a As Integer
Dim fi
a = TextBox1.Text
RichTextBox1.Text = "{ "
For fi = 1 To a
System.Threading.Thread.Sleep(1)
If RichTextBox1.Text = "{ " Then
RichTextBox1.Text = RichTextBox1.Text & fi
Else
If a Mod fi = 0 Then
RichTextBox1.Text = RichTextBox1.Text & " & " & fi
End If
End If
Next
RichTextBox1.Text = RichTextBox1.Text & " }"
Timer1.Enabled = False
If Label1.Visible = True Then
Label1.Visible = False
End If
End If
End Sub
دقیقا اینو تست کردم رو کد شما مشکلی نداشت و برنامه هنگ نکرد

تشکر فراموش نشه

ali.rk
پنج شنبه 30 خرداد 1392, 09:51 صبح
دوست عزیز

System.Threading.Thread.Sleep(1)

برای 0.001 ثانیه صبر می کنه کار نکرد (اعداد بزرگ )

maxvel
پنج شنبه 30 خرداد 1392, 11:08 صبح
خب بیشتر بذار!

ali.rk
پنج شنبه 30 خرداد 1392, 11:33 صبح
ربطی نداره . کسی راه حل دیگری نداره ؟

ali.rk
پنج شنبه 30 خرداد 1392, 13:16 عصر
سلام دوستان ... حل شد از maxvel و lootiamir متشکر که کمک کردن .
سر richtextbox1 ارور می دان چون نمی تونست در زمان اجرا درش تغییر ایجاد کنه . باید درقسمت backgroundworker1_run worker completed

می نوشتم تا کار کنه . فایل کاملم گذاشتم

lootiamir
پنج شنبه 30 خرداد 1392, 17:46 عصر
سلام دوستان ... حل شد از maxvel و lootiamir متشکر که کمک کردن .
سر richtextbox1 ارور می دان چون نمی تونست در زمان اجرا درش تغییر ایجاد کنه . باید درقسمت backgroundworker1_run worker completed

می نوشتم تا کار کنه . فایل کاملم گذاشتم
تا جایی که من میدونم background worker با اجزای فرم بطور مستقیم در ارتباط نیست برای همین از richtextbox ارور میگیره !!!