منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] تعليق الكود - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] تعليق الكود (/showthread.php?tid=16132)



تعليق الكود - محمد اسماعيل - 13-06-16

عندي برنامج ارسل من خلالة ايميل الي الياهو يحاخذ وقت في الارسال عند تحريك الماوس او الضغط علي الفورم يتجمد

كلة دة طبيعي

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

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

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


كود :
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



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


رابط ما اريد


RE: تعليق الكود - hitman48 - 13-06-16

ان كنت تريد ارسال من ايميل يجب تعمل دخول اولا 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



RE: تعليق الكود - الوادي - 13-06-16

يا محمد،

جرب هذه الطريقة يمكن تناسبك، بسبب عدم امكانية معرفة النسبة المنجزة للعملية استخدمت النمط 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 



RE: تعليق الكود - محمد اسماعيل - 13-06-16

(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

اشكرك اخي الكريم علي الرد ولكن الثريد افضل من التايمر


RE: تعليق الكود - الوادي - 13-06-16

يا محمد،

يللي فهمته انك تريد 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 

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


RE: تعليق الكود - محمد اسماعيل - 14-06-16

(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 

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

الف شكر فعلا هذا ما اريد بالضبط