تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
بوتن ايقاف BackgroundWorker
#1
السلام عليكم اخوان 
ارجو منكم مساعدتي بكود يجعل الاجراءات التي بداخل BackgroundWorker تتوقف بمجرد الضغط على زر معمول للايقاف
الرد
تم الشكر بواسطة:
#2
ضع لنفسك شرطا أو مجموعة شروط عبارة عن Boolean إن تحققت استخدم Exit Sub تخرج بها من الروتين ٍالذي ينتمي الي BackgroundWorker
وهذا مرتبط بنوعية الوظيفة التي يقوم بها BackgroundWorker
الرد
تم الشكر بواسطة:
#3
(22-06-17, 03:51 AM)silverlight كتب : ضع لنفسك شرطا أو مجموعة شروط عبارة عن Boolean إن تحققت استخدم Exit Sub تخرج بها من الروتين ٍالذي ينتمي الي BackgroundWorker
وهذا مرتبط بنوعية الوظيفة التي يقوم بها BackgroundWorker

لو تكرمت اخي ان توضح لي بمثال اذكان بالامكان
او اضع الكود خاصتي و تعدل عليه
الرد
تم الشكر بواسطة:
#4
مارايك بالاطلاع على الرد هذا
الرد
تم الشكر بواسطة:
#5
هذا الكود احب ان اعمل بوتن ثاني لايقاف عمله
Private Sub backwork_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles backwork.DoWork
Try
Dim sourceLines() As String = IO.File.ReadAllLines(ALLWGS)

' header ------------------------------
Me.StatusLabel.Text = "header Traitement..."
Dim header(21 - 1) As String
Array.Copy(sourceLines, 0, header, 0, 21)
Me.StatusLabel.Text = "header completed"

' details -----------------------------
Me.StatusLabel.Text = "details Traitement..."
Dim details(sourceLines.Count - 21 - 1) As String
Array.Copy(sourceLines, 21, details, 0, sourceLines.Count - 21)

For i = 0 To details.Length - 1
details(i) = details(i).Substring(21, 4) & " - " & details(i)
Next
Array.Sort(details)
For i = 0 To details.Length - 1
details(i) = details(i).Substring(7)
Next
Me.StatusLabel.Text = "header completed"


'splitfiles ---------------------------------------------
swat_star_to_end()
Dim bloc_of_swat As New List(Of String)()
Dim files() As String = IO.File.ReadAllLines(STATISTIQUE)
For i As Integer = indax_sw_star.Text To indax_sw_end.Text
bloc_of_swat.Add(files(i))
Next
For Each f As String In bloc_of_swat
If f.Trim <> "" Then
Dim filename As String = f.Substring(0, 5)
Me.StatusLabel.Text = filename & " Traitement..."
Dim flagStart As Integer = Val(f.Substring(6, 4))
Dim flagEnd As Integer = Val(f.Substring(11, 4))
Dim flagCount As Integer = Val(f.Substring(16))
Dim range = Enumerable.Range(flagStart, flagEnd - flagStart + 1)
Dim RegexPattern As String = "^\w(\d{3})\s\s\s\s\s\s\s\s\s\s\s\s\s(\d{4})(" & String.Join("|", range) & ")\s.+"

Dim ms As MatchCollection = Regex.Matches(String.Join(vbNewLine, details), RegexPattern, RegexOptions.Multiline)
Dim resultLines = (From x As Match In ms Select x.Value).ToArray

If flagCount <> ms.Count Then
ListBox1.Items.Add(filename)
End If
Dim lines() As String = IO.File.ReadAllLines("header.HDR")
Dim resultFile As String = String.Empty
If lines.Length < 20 Then
MsgBox("header lines infirieur a 20 vrifier votre heder")
Me.StatusLabel.Text = "Erreur au niveau de header taille."
Else
For i = 0 To 19
resultFile &= lines(i) & vbNewLine
Next
resultFile &= "" & vbNewLine
resultFile &= String.Join(vbNewLine, resultLines) & vbNewLine
IO.File.WriteAllText(filename & ".wgs", resultFile)
Me.StatusLabel.Text = filename & " completed"
Me.StatusLabel.Text = "Tout les Swat calculent avec succès."
If Me.StatusLabel.Text = "Tout les Swat calculent avec succès." Then
sw_star.Visible = False
sw_end.Visible = False
End If
End If
End If
Next



Catch ex As Exception
Me.StatusLabel.Text = "Errer."
MsgBox(ex.Message)
End Try
StatusProgressBar.Visible = False

Me.Button1.Enabled = True
Me.Button2.Enabled = True
Me.TextBox1.Enabled = True
Me.TextBox2.Enabled = True
Me.TextBox3.Enabled = True
Me.TextBox4.Enabled = True
End Sub
الرد
تم الشكر بواسطة:
#6
هل تقصد ايقاف وتجاهل كافة التغييرات؟
يعني لو تم تشغيله يبدا كما انه اول مرة؟

بكل الاحوال لا تنسى تضبط الاعدادات كما تشاهد بالصورة



لو جوابك نعم
PHP كود :
Public Class Form1
    Private Sub lbl
(ByVal l As String)
 
       If Label1.InvokeRequired Then
            Label1
.Invoke(New Action(Of String)(AddressOf lbl), l)
 
       Else
            Label1
.Text l
        End 
If
 
   End Sub
    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        If b
.IsBusy False Then
            b
.RunWorkerAsync()
 
       End If
 
   End Sub
    Private Sub b_DoWork
(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles b.DoWork
        If b
.CancellationPending False Then
            For r 
0 To 1000
                If b
.CancellationPending False Then
                    Threading
.Thread.Sleep(500)
 
                   lbl(r)
 
               End If
 
           Next
        End 
If
 
   End Sub

    Private Sub Button2_Click
(sender As ObjectAs EventArgsHandles Button2.Click
        b
.CancelAsync()
 
   End Sub
End 
Class 
الرد
تم الشكر بواسطة:
#7
حتى يتضح المطلوب اكثر طلبي هو الشطر الثاني من موضوع كنت ظرحته سابقا على المنتدى زالذي يحمل عنوان مساعدة في عمل برنامجمساعدة في عمل برنامج
وكانت الاجابة الوافية والشافية من الاخ [b]السرور [/b]جزاه الله الف عبر كود يحوي BackgroundWorker ولاني مبتدى في البرمجة لم افهم التعامل مع BackgroundWorker
وانا حاليا اريد ان اعمل زر يجعل BackgroundWorker يتوقف 


هذا الطرح لابراز الاشكال و ليكون الكود الذي اعمل عليه مفهوم 

ارجو منكم زيارة الموضوع مساعدتي بكود لايقاف BackgroundWorker

الموضوع على الرابط التالي بالمنتدى

http://vb4arb.com/vb/showthread.php?tid=18127
الرد
تم الشكر بواسطة:
#8
إقتباس :مساعدة في عمل برنامجم
هذا الموضوع عن انشاء bgw وقت التشغيل  ومشاركتي عنها وقت التصميم جرب طريقتنا وستلاحظ ان الامر سهل.
واذا كنت فقط تريدها  تحديدا اخبرنا عن اخر نقطة تود الانطلاق منها.
الرد
تم الشكر بواسطة:
#9
الأخ Rabeh

backgroundworker من عائلة Threading
وهو لكي يعمل يحتاج الي تايمر لذلك ستجد ان مشكلتك هي ايقاف التايمر

دعني اوضح لك الأمر بمثال بسيط جدا مختلف عن Backgroundworker
و لكنه مشابه تماما لما يقوم به Backgroundworker

لنفترض جدلا انك تريد تغيير خلفية لون الفورم الي اللون الأسود مثلا وذلك من خلال تايمر
انت هنا تقوم بإضافة التايمر ثم تقوم بتشغيله ومن خلاله تقوم بتغيير لون خلفية الفورم بأي لون تحدده

لكن حينما تريد ان تلغي العملية بعد تنفيذها هنا عليك ان تقوم بإيقاف التايمر و تعيد كل شئ الي طبيعته الاصلية

لو فكرت في الأمر قليلا ستكتشف انك تستطيع الاستغناء عن backgroundworker تماما و تستبدله بتايمر و اعتقد سكون اسهل لك التعامل مع التايمر

الكود التالي ه تنفيذ عملي لما قلته لك

افتح مشروع اضف له 2 باتون احدهما سيتكفل بتشغل التايمر و الاخر سيقوم بإيقاف التايمر

PHP كود :
Public Class Form1

    Private clock 
As Timer = New Timer
    Private clr 
As Color Color.Black

    Private Sub Button2_Click
(sender As ObjectAs EventArgsHandles Button2.Click
        StopAction
()
 
   End Sub

    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        DoAction
(Me)
 
   End Sub

    Private Sub DoAction
(ctrl As Controlcriteria As Boolean)
 
       If criteria Then
            clock
.Enabled True
            clock
.Start()
 
           AddHandler clock.TickAddressOf Clock_Action
        End 
If
 
   End Sub

    Private Sub DoAction
(ctrl As Control)
 
       DoAction(ctrltrue)
 
   End Sub

    Private Sub Clock_Action
(sender As ObjectAs EventArgs)
 
       Me.BackColor clr
    End Sub

    Private Sub StopAction
()

 
       clock.Stop()
 
       clock.Enabled False

        Me
.clr Color.Black
        Me
.BackColor SystemColors.Control

    End Sub

    Private Sub DisposeClock
()
 
       If clock.Enabled True Then
            clock
.Enabled False
        End 
If
 
       clock.Stop()
 
       RemoveHandler clock.TickAddressOf Clock_Action
        If clock IsNot Nothing Then
            clock
.Dispose()
 
           clock Nothing
        End 
If
 
   End Sub


End 
Class 


اخيرا في الحدث ForrmClosing عليك بعمل Dispsoe للتايمر و لقد كتبت لك شكل الروتين Dispose في الكود اعلاه

او ممكن بدلا من استخدام تايمر بهذا الاسلوب
تستطيع ان تضيف تايمر عادي بلا منه للفورم
الرد
تم الشكر بواسطة:
#10
شكرا لك اخي [b] silverlight انت والاخ سعود لقد جربت كل اقتراحتكما ولكن لم تنفع[/b]
[b] الخلال ليس في افكاركما حاشا لله انتما مشكورين على الجهد بل الخلال في تطبيقي انا للاكواد لم اعرف التعامل معها لكوني مبتدى في البرمجة اضافة الى ذلك تصادفت مع BackgroundWorker المعقد [/b]

[b]ارجو منكما لو تكرمتما تقديم المزيد من العون بادراج الاكواد المقترحة مع كودي الوارد في الموضوع و التجريب ربما يظهر لكما الخلال و انتما الاعلم مني [/b]
[b]اسمحولي على مغالتي في طلبي لكن صدقوني هذا البرنامج يعني لي الكثير لانه يوفر على عناء كبير في عملي[/b]
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كود ايقاف صوت المعالج عند التنقل برز enter بسام محمدغانم 1 105 20-10-21, 01:30 AM
آخر رد: ابراهيم ايبو
  ايقاف التايمر بعد عمل معين ابو روضة 10 968 01-06-21, 05:05 AM
آخر رد: سعود
  كود ايقاف المنافذ new_programer 0 467 12-06-20, 11:09 PM
آخر رد: new_programer
  اريد عمل Invoke لهذا الكود لوضعه في BackGroundWorker developermedo111 1 707 14-05-20, 12:00 PM
آخر رد: عبدالله الدوسري
  بخصوص اداة BackgroundWorker ابو روضة 11 2,376 18-02-20, 01:26 PM
آخر رد: alsalamoni
  [VB.NET] تـأخير غلق الفورم او البرنامج حتى ينتهي كل Backgroundworker من الأوامر larbihamri 6 1,555 12-01-20, 10:15 PM
آخر رد: محمد كريّم
  [VB.NET] مشكلة اضافة بوتن لكل خلية بالداتاجريد فيو محمد اسماعيل 4 1,078 21-12-19, 12:34 AM
آخر رد: محمد اسماعيل
  [VB.NET] قفل بوتن بكلمة سر EMADSSS 3 781 25-11-19, 01:01 AM
آخر رد: EMADSSS
  الاستعلام لا يعمل مع BackgroundWorker Emam emam 23 3,645 10-10-19, 03:49 PM
آخر رد: asemshahen5
  [VB.NET] ايقاف عمل زر الخروج محمد بوقزاحة 4 1,041 16-09-19, 05:51 PM
آخر رد: AbdoDabak

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم