PDA

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



SHD.NET
سه شنبه 12 دی 1391, 10:21 صبح
سلام .
من یه برنامه دارم که تا اجرا میشه یه سری اطلاعات رو باید از وب بگیره . ولی هنگام دریافت این اطلاعات هنگ می کنه . یه پروگرس بار هم داره برای نمایش اطلاعات . ولی پروگرس با ر هم گیر می کنه.
راهی هستش که برنامم هنگ نکنه ؟؟
از ترد استفاده کردم فایده نداشت . از Background w هم استفاده می کنم از آبجکت هام اررور میگیره . ممنون میشم راهنماییم کنین

SHD.NET
سه شنبه 12 دی 1391, 10:21 صبح
دوستان میشه چندنمونه ترد و Background worker اینجا بزارین .؟؟ شاید مشکل از دستورات من بوده
ممنون

SHD.NET
سه شنبه 12 دی 1391, 11:10 صبح
آقا یکی ج.اب مارو میده ؟؟ عجله دارم !!

tstsst
سه شنبه 12 دی 1391, 15:05 عصر
در بکگراند ورکر نمی تونی از آبجکت که مال اون نیست استفاده کنی
می تونی از e.Result یا از متغییر پابلیک استفاده کنی
یک نمونه کد:

Dim a As Integer = 0
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
While (1)
a += 1
BackgroundWorker1.ReportProgress(0)
End While
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Me.Text = a
End Sub

البته آرگومان هم می تونی بهش بفرستی
حالا نوع آبجکتاتو بگو ببمنم چیکار می شه کرد

SHD.NET
سه شنبه 12 دی 1391, 15:48 عصر
میخوام با این دستور به پانل کنترل اضافه کنم

Panel1.Controls.Add(objName)

tstsst
سه شنبه 12 دی 1391, 16:34 عصر
چرا تو بکگراند ورکر ؟
اینکه مشکلی نداره و نیاز به انجام چند عمل هم زمان هم نیست ؟!

SHD.NET
سه شنبه 12 دی 1391, 18:44 عصر
من با این دستور یه عکس رو از روی وب توی پیکچرباکس نشون میدم . اما برنامه به مدت چندثانیه هنگ می کنه
Dim MyWebClient As New System.Net.WebClient
Dim ImageInBytes() As Byte = MyWebClient.DownloadData("Picture Address")
Dim ImageStream As New IO.MemoryStream(ImageInBytes)
frmPic.BackgroundImage = New System.Drawing.Bitmap(ImageStream)
With Form1
.Enabled = False
.PictureBox1.Width = .Width
.PictureBox1.Height = .Height
.PictureBox1.BringToFront()
.PictureBox1.Visible = True
frmPic.Show()
End With


باید چکار کنم ؟؟
چگونه میتونم کاری کنم که برنامه هنگ نکنه ؟

ممنون

tstsst
سه شنبه 12 دی 1391, 19:16 عصر
اولا
Dim bitm As Bitmap
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim MyWebClient As New System.Net.WebClient
Dim ImageInBytes() As Byte = MyWebClient.DownloadData("http://barnamenevis.org/image.php?u=254254&dateline=1354724509")
Dim ImageStream As New IO.MemoryStream(ImageInBytes)
bitm = New System.Drawing.Bitmap(ImageStream)
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
With Me
.PictureBox1.Image = bitm
.Enabled = False
.PictureBox1.Width = .Width
.PictureBox1.Height = .Height
.PictureBox1.BringToFront()
.PictureBox1.Visible = True
PictureBox1.Show()
End With
End Sub

دوما فرم غیر فعال میشه چون
.Enabled = False
فقط همین

SHD.NET
سه شنبه 12 دی 1391, 19:35 عصر
داداش دمت گرم . کارم راه افتاد

h_a_m_i_d
چهارشنبه 13 دی 1391, 16:33 عصر
دوست عزیز با این راه هم میشه application.Doevents

SHD.NET
چهارشنبه 13 دی 1391, 17:02 عصر
دوست عزیز با این راه هم میشه application.Doevents

این دستور رو قبلش امحتحان کرده بودم .اما جواب نداده بود . برا همین تاپیک ردم

:چشمک:\\\موفق باشید///:چشمک: