الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عند الدخول في حلقه طويله لا استطيع التحكم في الفورم

بدأه المهندس الليبي في 15 أغسطس 2012 · 5 رد · 580 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني عند الدخول في الحلقة التاليه

 For x As Integer = 0 To length

                        length2 = Un4seen.Bass.Bass.BASS_ChannelGetData(stream, data, length)

                    Next

اصبح غير قادر ع التحكم في الفورم حتى الخروج من الحلقه وهي حلقة طويلة جدا بالالاف .....

ارجوا ان تساعدوني في ايجاد الحل

هذا البرنامج كاملا

Public Class Form1
    Private StreamTHD As Thread
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text.Trim = "" Then
            MsgBox("You must choose file", MsgBoxStyle.OkOnly, "ERROR")
        Else
            Application.DoEvents()
            Stream()
        End If
    End Sub

    Private Sub Stream()
        Dim fileName As String = "C:\test.mp3"
        Dim eror As String = Nothing

        If Un4seen.Bass.Bass.LoadMe() = False Then
            MsgBox("Error")
            Exit Sub
        End If

        Un4seen.Bass.Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero, Nothing)

        Dim stream As Integer = Un4seen.Bass.Bass.BASS_StreamCreateFile(TextBox1.Text, 0, 0, BASSFlag.BASS_STREAM_DECODE)
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode

        If stream = 0 Then
            '' Stream = 0 error

            MsgBox("StreamCreatefileError" & Un4seen.Bass.Bass.BASS_ErrorGetCode)
        End If


        Dim lame As New EncoderLAME(stream)
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode


        lame.InputFile = Nothing   'STDIN
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        lame.OutputFile = Nothing   'STDOUT
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_128)
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        lame.LAME_Mode = EncoderLAME.LAMEMode.Default
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        lame.LAME_TargetSampleRate = Int(EncoderLAME.SAMPLERATE.Hz_44100)
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode

        lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
        eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        'lame.Start(Nothing, IntPtr.Zero, False)
        'eror = Un4seen.Bass.Bass.BASS_ErrorGetCode
        If Not lame.Start(Nothing, IntPtr.Zero, False) Then
            MsgBox("LameStartError" & Un4seen.Bass.Bass.BASS_ErrorGetCode)

        End If



        Dim icecast As New ICEcast(lame)
        icecast.ServerAddress = "Salem-VAIO"
        icecast.ServerPort = 8001
        icecast.Username = "salem"
        icecast.Password = "b2006d"
        icecast.MountPoint = "/stream"

        icecast.StreamName = "2"
        icecast.StreamGenre = " Genre 2"
        icecast.PublicFlag = True
        icecast.SongTitle = "Test 2 Song"

        If icecast.Connect() Then
            If icecast.Login() Then
                If icecast.IsConnected() Then
                    Dim m_BroadCast As New BroadCast(icecast)

                    m_BroadCast.AutoReconnect = True
                    m_BroadCast.ReconnectTimeout = 5

                    Dim length As Integer = CInt(Un4seen.Bass.Bass.BASS_ChannelSeconds2Bytes(stream, 5))
                    Dim data(length) As Byte
                    Dim length2 As Integer
                    For x As Integer = 0 To length

                        length2 = Un4seen.Bass.Bass.BASS_ChannelGetData(stream, data, length)

                    Next
                    MsgBox("ok")
                End If
            End If

        Else
            MsgBox("Error")
        End If
        Return
    End Sub
End Sub
End Class
#2

الحل هو Threading

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

السلام عليكم ورحمة الله وبركاته

من الممكن إستخدام الطريقة المشتركة Application.DoEvents داخل الحلقة حيث تقوم هذه الطريقة بتوزيع وقت المعالجة في نفس مسار التنفيذ.

ملاحظة:

الـ الكلاس Application موجود ضمن مجال الأسماء System.Windows.Forms .

السلام عليكم ورحمة الله وبركاته

تم تعديل هذه المشاركة بواسطة DOWNLOADER في 15 أغسطس 2012 في 10:11

#4
Xacker كتب:

الحل هو Threading

اخي حاولت استخدامها لكن لم تشتغل الداله ممكن تعطي لي الصيغه االصحيحه لها واين توضع

DOWNLOADER كتب:

السلام عليكم ورحمة الله وبركاته

من الممكن إستخدام الطريقة المشتركة Application.DoEvents داخل الحلقة حيث تقوم هذه الطريقة بتوزيع وقت المعالجة في نفس مسار التنفيذ.

ملاحظة:

الـ الكلاس Application موجود ضمن مجال الأسماء System.Windows.Forms .

السلام عليكم ورحمة الله وبركاته

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

#5

للأسف لم أستخدمها في .NET من قبل لعدم حاجتي لها، وبكل الأحوال فأنا أكتب بـ C#

عليك بقراءة الموضوع على الرابط الذي أرشدتك إليه بشكل جيد وبتمعن مع استخدام البحث عن مواضيع مشابهة حتى تتضح لديك الصورة بشكل كامل.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#6

قم باستخدام backgroundworker

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…