تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] تعليق الكود
#1
Video 
عندي برنامج ارسل من خلالة ايميل الي الياهو يحاخذ وقت في الارسال عند تحريك الماوس او الضغط علي الفورم يتجمد

كلة دة طبيعي

اريد كود او طريقة لاظهار شريط تقدم بروجريس اثناء الارسال او كود ثابت استخدمة لاي دالة تحدث توقف للفورم حتي انتهاء التنفيذ

شاشة انتظار حتي الخروج من الكود
  

دة كود ارسال الايميل الي الياهو شغال تمام وكل شيء


كود :
Dim mail As New MailMessage
Try
mail.Subject = "email"
mail.To.Add(TextBox2.Text)
mail.From = New MailAddress(TextBox2.Text)
mail.Body = "good"
Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
smtp.EnableSsl = True
smtp.Credentials = New System.Net.NetworkCredential(TextBox2.Text, TextBox3.Text)
smtp.Port = "587"
smtp.Send(mail)
MsgBox("mail sent")

Catch ex As Exception

MessageBox.Show(ex.Message)
End Try



اريد شاشة انتظار ومنع الفورم من التعليق او التهنيج نفس الموضوع دة ويكون كود ثابت لاي عملية تاخذ وقت


رابط ما اريد
الرد }}}
تم الشكر بواسطة:
#2
ان كنت تريد ارسال من ايميل يجب تعمل دخول اولا login ثم تبعث الايميل

عملتلك مثال شوف الي يناسبك

كود :
Imports System.Net.Mail

Public Class Form1

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

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       ProgressBar1.Increment(2)
       Label1.Text = ProgressBar1.Value & "%"
       If ProgressBar1.Value = 200 Then
           Try
            Dim SmtpServer As New SmtpClient()
            Dim mail As New MailMessage()
            SmtpServer.Credentials = New  _
  Net.NetworkCredential("amineip0123@gmail.com", "kl01234560")
            SmtpServer.Port = 587
            SmtpServer.EnableSsl = True
            SmtpServer.Host = "smtp.gmail.com"
            mail = New MailMessage()
            mail.From = New MailAddress("amineip0123@gmail.com")
            mail.To.Add("nevergiveupno20015@gmail.com")
            mail.Subject = "Test Mail"
            mail.Body = "This is for testing SMTP mail from GMAIL"

            SmtpServer.Send(mail)
            MsgBox("mail send")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

           Timer1.Stop()
           ProgressBar1.Value = 1
       End If
   End Sub

End Class
الرد }}}
تم الشكر بواسطة:
#3
يا محمد،

جرب هذه الطريقة يمكن تناسبك، بسبب عدم امكانية معرفة النسبة المنجزة للعملية استخدمت النمط ProgressBarStyle.Marquee
PHP كود :
Public Class Form1

    Dim thr 
As Threading.Thread

    Private Sub Form1_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        CheckForIllegalCrossThreadCalls 
False

    End Sub


    
' إبدأ الارسال '
 
   Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        thr 
= New Threading.Thread(AddressOf task)
 
       thr.IsBackground True
        thr
.Start()
 
       ProgressBar1.Style ProgressBarStyle.Marquee
    End Sub

    
' إلغاء الارسال '
 
   Private Sub Button2_Click(sender As System.ObjectAs System.EventArgsHandles Button2.Click
        If Not IsNothing
(thrThen
            thr
.Abort()
 
           ProgressBar1.Style ProgressBarStyle.Blocks
        End 
If
 
   End Sub


    Sub task
()

 
       Try
            Dim mail 
As New MailMessage
            mail
.Subject "email"
 
           mail.To.Add(TextBox2.Text)
 
           mail.From = New MailAddress(TextBox2.Text)
 
           mail.Body "good"
 
           Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
 
           smtp.EnableSsl True
            smtp
.Credentials = New System.Net.NetworkCredential(TextBox2.TextTextBox3.Text)
 
           smtp.Port "587"
 
           smtp.Send(mail)
 
           MsgBox("mail sent")
 
       Catch ex As Exception
            MessageBox
.Show(ex.Message)
 
       End Try

 
       ProgressBar1.Style ProgressBarStyle.Blocks

    End Sub

End 
Class 
الرد }}}
تم الشكر بواسطة:
#4
(13-06-16, 03:20 PM)الوادي كتب : يا محمد،

جرب هذه الطريقة يمكن تناسبك، بسبب عدم امكانية معرفة النسبة المنجزة للعملية استخدمت النمط ProgressBarStyle.Marquee
PHP كود :
Public Class Form1

    Dim thr 
As Threading.Thread

    Private Sub Form1_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        CheckForIllegalCrossThreadCalls 
False

    End Sub


    
' إبدأ الارسال '
 
   Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        thr 
= New Threading.Thread(AddressOf task)
 
       thr.IsBackground True
        thr
.Start()
 
       ProgressBar1.Style ProgressBarStyle.Marquee
    End Sub

    
' إلغاء الارسال '
 
   Private Sub Button2_Click(sender As System.ObjectAs System.EventArgsHandles Button2.Click
        If Not IsNothing
(thrThen
            thr
.Abort()
 
           ProgressBar1.Style ProgressBarStyle.Blocks
        End 
If
 
   End Sub


    Sub task
()

 
       Try
            Dim mail 
As New MailMessage
            mail
.Subject "email"
 
           mail.To.Add(TextBox2.Text)
 
           mail.From = New MailAddress(TextBox2.Text)
 
           mail.Body "good"
 
           Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
 
           smtp.EnableSsl True
            smtp
.Credentials = New System.Net.NetworkCredential(TextBox2.TextTextBox3.Text)
 
           smtp.Port "587"
 
           smtp.Send(mail)
 
           MsgBox("mail sent")
 
       Catch ex As Exception
            MessageBox
.Show(ex.Message)
 
       End Try

 
       

    End Sub

End 
Class 

الطريقة جميلة جدا والكود ظبط معي ولكن اريد شيء اخر

لو استخدمت 2 فورم
الاول فية شاشة الايميل التيكست والبوتن   و  
PHP كود :
   Sub task()

        Try
            Dim mail As New MailMessage
            mail
.Subject "email"
            mail.To.Add(TextBox2.Text)
            mail.From = New MailAddress(TextBox2.Text)
            mail.Body "good"
            Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
            smtp.EnableSsl True
            smtp
.Credentials = New System.Net.NetworkCredential(TextBox2.TextTextBox1.Text)
            smtp.Port "587"
            smtp.Send(mail)
            MsgBox("mail sent")
        Catch ex As Exception
            MessageBox
.Show(ex.Message)
        End Try

        form2.ProgressBar1.Style ProgressBarStyle.Blocks

    End Sub 


الفورم الثاني اليروجريس  حق الثريد

ونقلت الثريد للفورم الثاني   بالكود دة

   Dim thr As Threading.Thread

    Private Sub FORM_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        On Error Resume Next
        CheckForIllegalCrossThreadCalls = False
        thr = New Threading.Thread(AddressOf Form1.task)
        thr.IsBackground = True
        thr.Start()
        ProgressBar1.Style = ProgressBarStyle.Marquee
    End Sub

    
    Private Sub FORM_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        System.Threading.Thread.Sleep(20000)
        If ProgressBar1.Style = ProgressBarStyle.Blocks Then
            Me.Close()

        Else
            System.Threading.Thread.Sleep(20000)
        End If
    End Sub
وعملت كود اغلاق للثريد بالطريقة دية

ارسل الايميل ولم يوقف البروجريس بار والفورم


الشق الثاني هل استخد م الثريد هذا باي دالة تجمد الفورم بنفس الطريقة

وجزاك اللة الف خير عني وعن غيري

(13-06-16, 03:08 PM)hitman48 كتب : ان كنت تريد ارسال من ايميل يجب تعمل دخول اولا login ثم تبعث الايميل

عملتلك مثال شوف الي يناسبك

كود :
Imports System.Net.Mail

Public Class Form1

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

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       ProgressBar1.Increment(2)
       Label1.Text = ProgressBar1.Value & "%"
       If ProgressBar1.Value = 200 Then
           Try
           Dim SmtpServer As New SmtpClient()
           Dim mail As New MailMessage()
           SmtpServer.Credentials = New  _
 Net.NetworkCredential("amineip0123@gmail.com", "kl01234560")
           SmtpServer.Port = 587
           SmtpServer.EnableSsl = True
           SmtpServer.Host = "smtp.gmail.com"
           mail = New MailMessage()
           mail.From = New MailAddress("amineip0123@gmail.com")
           mail.To.Add("nevergiveupno20015@gmail.com")
           mail.Subject = "Test Mail"
           mail.Body = "This is for testing SMTP mail from GMAIL"

           SmtpServer.Send(mail)
           MsgBox("mail send")
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try

           Timer1.Stop()
           ProgressBar1.Value = 1
       End If
   End Sub

End Class

اشكرك اخي الكريم علي الرد ولكن الثريد افضل من التايمر
الرد }}}
تم الشكر بواسطة: hitman48
#5
يا محمد،

يللي فهمته انك تريد Form2 تكون شاشة شريط الانظار، على هذا يكون الكود

Form1
PHP كود :
Public Class Form1

    Dim thr 
As Threading.Thread

    
Private Sub Form1_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        CheckForIllegalCrossThreadCalls 
False

    End Sub


    
' إبدأ الارسال '
    
Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        thr 
= New Threading.Thread(AddressOf task)
        
thr.IsBackground True
        thr
.Start()

        
Form2.ShowDialog()
        If 
Not IsNothing(thrThen thr.Abort()

    
End Sub


    Sub task
()

        Try
            
Dim mail As New MailMessage
            mail
.Subject "email"
            
mail.To.Add(TextBox2.Text)
            
mail.From = New MailAddress(TextBox2.Text)
            
mail.Body "good"
            
Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
            
smtp.EnableSsl True
            smtp
.Credentials = New System.Net.NetworkCredential(TextBox2.TextTextBox3.Text)
            
smtp.Port "587"
            
smtp.Send(mail)
            
MsgBox("mail sent")
        Catch 
ex As Exception
            MessageBox
.Show(ex.Message)
        
End Try

        
Me.Invoke(New FormCloseDelegate(AddressOf Form2Close))

    
End Sub


    Delegate Sub FormCloseDelegate
()
    
Sub Form2Close()
        
Form2.Close()
    
End Sub


End 
Class 

Form2 وفيه زر لإلغاء العملية
PHP كود :
Public Class Form2

    
Private Sub Form2_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        ProgressBar1
.Style ProgressBarStyle.Marquee
    End Sub

    
' إلغاء الارسال '
    
Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        Me
.Close()
    
End Sub

End 
Class 

أما الشق الثاني بخصوص استخدام الثريد،
هو أساساً مهمة مستقلة (أكيد سمعت عن تعدد المهام)
ويستخدم ليقوم بعملية معينة (في الخلفية) بينما يستمر العمل بالبرنامج (بدون تجميد)،
لكن لازم تعرف طريقة عمله بشكل صحيح.
الرد }}}
تم الشكر بواسطة:
#6
(13-06-16, 05:56 PM)الوادي كتب : يا محمد،

يللي فهمته انك تريد Form2 تكون شاشة شريط الانظار، على هذا يكون الكود

Form1
PHP كود :
Public Class Form1

    Dim thr 
As Threading.Thread

    Private Sub Form1_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        CheckForIllegalCrossThreadCalls 
False

    End Sub


    
' إبدأ الارسال '
 
   Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        thr 
= New Threading.Thread(AddressOf task)
 
       thr.IsBackground True
        thr
.Start()

 
       Form2.ShowDialog()
 
       If Not IsNothing(thrThen thr.Abort()

 
   End Sub


    Sub task
()

 
       Try
            Dim mail 
As New MailMessage
            mail
.Subject "email"
 
           mail.To.Add(TextBox2.Text)
 
           mail.From = New MailAddress(TextBox2.Text)
 
           mail.Body "good"
 
           Dim smtp As New SmtpClient("smtp.mail.yahoo.com")
 
           smtp.EnableSsl True
            smtp
.Credentials = New System.Net.NetworkCredential(TextBox2.TextTextBox3.Text)
 
           smtp.Port "587"
 
           smtp.Send(mail)
 
           MsgBox("mail sent")
 
       Catch ex As Exception
            MessageBox
.Show(ex.Message)
 
       End Try

 
       Me.Invoke(New FormCloseDelegate(AddressOf Form2Close))

 
   End Sub


    Delegate Sub FormCloseDelegate
()
 
   Sub Form2Close()
 
       Form2.Close()
 
   End Sub


End 
Class 

Form2 وفيه زر لإلغاء العملية
PHP كود :
Public Class Form2

    Private Sub Form2_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        ProgressBar1
.Style ProgressBarStyle.Marquee
    End Sub

    
' إلغاء الارسال '
 
   Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        Me
.Close()
 
   End Sub

End 
Class 

أما الشق الثاني بخصوص استخدام الثريد،
هو أساساً مهمة مستقلة (أكيد سمعت عن تعدد المهام)
ويستخدم ليقوم بعملية معينة (في الخلفية) بينما يستمر العمل بالبرنامج (بدون تجميد)،
لكن لازم تعرف طريقة عمله بشكل صحيح.

الف شكر فعلا هذا ما اريد بالضبط
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ممكن حل المشكلة فى الكود التالي - من مشاركة استاذنا القدير / عبدالله الدوسري new_programer 4 169 02-03-24, 07:36 PM
آخر رد: new_programer
  ماهو حل هذا الخطأ في الكود melad2002 7 264 25-02-24, 12:25 AM
آخر رد: justforit
  كيفية انشاء سكريبت لقاعدة بيانات من خلال الكود heem1986 1 193 20-02-24, 12:00 AM
آخر رد: Kamil
  [VB.NET] أرغب فى استخدام هذا الكود بالتحديد على الإصدار 10 AmeenRashed 3 206 19-01-24, 12:42 PM
آخر رد: Taha Okla
  مشكلة تعليق البرنامج في حال عدم وجود ماسح ضوئي متصل بالكمبيوتر صالح عبدالله 1 210 09-01-24, 10:51 PM
آخر رد: صالح عبدالله
  [VB.NET] ما الخطأ فى هذا الكود - كود البحث المتعدد Ashraf Elafify 7 464 27-12-23, 10:50 PM
آخر رد: Ashraf Elafify
  [VB.NET] اريد تعديل في الكود عند طباعة DGV abu_hisham7 1 431 03-12-23, 02:40 AM
آخر رد: abu_hisham7
  رجاء التعديل على الكود المرفق - كلاس لعرض كود المورد new_programer 4 357 13-10-23, 01:47 AM
آخر رد: new_programer
  كيفية التحكم فى حجم الفورم من خلال الكود Ahmed.vb 4 510 11-10-23, 07:17 PM
آخر رد: bidaya
  اريد ارسال pdf عبر واتساب عن طريق ال API محتاج تعديل على الكود moh61 0 517 03-08-23, 03:41 PM
آخر رد: moh61

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


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