ايران ويج

نسخه‌ی کامل: اخطار thread!؟!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
کد:
Public Class Form1
    Dim s As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Open()
        SerialPort1.Write("OK")
    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        s = SerialPort1.ReadLine()
        TextBox1.Text = s
    End Sub
End Class

اون خطی که می خوام تکست باکس رو مقدار دهی کنم (رویداد recieve) ارور میده. عکسش رو گذاشتم.
چی میگه؟ برنامه میره رو یه thread دیگه ؟!
الیته من c++.net کار کردم نه vb.net
می گم جایی در مورد انتقال از وی بی به وی بی دات نت بحث کردین ؟
خب معمولا واسه اینکه سرعت انتقال اطلاعات از AVR به ویندوز ست نیست و avr سرعت بالاتری داره به طور معمول واسه اینکه اطلاعات از دست نره از تکنیک handshoking استفاده میکنن که تو این روش از یه thread با priority بالا استفاده میشه و احتمالا ارور شما به همین خاطر هست
سلام مبین عزیزم! خوبه یکی پیدا شد!

handshoking چیه؟ اگه منظورت همون handshake هست که غیر فعاله.
خب من چیکار کنم؟ فکر می کنم راهی هست که از اون thread با اولویت بالاتر که ایجاد میشه تکست باکس رو مقداردهی کرد. یه جا دیدم کدش رو ... انگار با دستور invoke بود ... منم که از دات نت سر در نمیارم!
سلام
سوات ما هم روزه گرفته همون دست تکانی که شما نوشتی درسته
(من هم DotNet کار نیستم راه که حتما هست دنبال ارتباط micro با com از طریق دلفی بودم که به این قضایا برخوردم فرصت نشد کاملش کنم)
یه کاری بکن یا priority مربوط به thread برنامتو high کن یا این مقدار دهی به TextBox رو تو یه thread با priority بالا بنویس ببین ok میشه

goodluck
البته با تایمر و این چیزا میشه درستش کرد ولی مسخره میشه ...

من می خوام از وی بی 6 برم سراغ وی بی دات نت ... کسی مقاله ای در این مورد داره که تفاوت ها رو آموزش بده و ما رو راه بندازه؟ وی بی 6 خوب کار کردم ...
نه تایمر نمیتونه یه سری از اطلاعات lose میشه واسه همین از تکنیک handshaking استفاده میکنن
نه!
منظورم این بود که یه تایمر بذارم از بیرون رویداد recieve تکست باکس رو مقداردهی کنه. تابع رویداد recieve تا آخر انجام بشه (اطلاعات رو تو متغیر بریزه) و بعد از بیرون بره تو تکست باکس.
خطا cross thread مربوط به این میشه که object شما در Thread دیگری ساخته شده (معمولا main thread) و شما میخواهید به آن در Thread دیگر دسترسی پیدا کنید .
برای حل بایستی آن دستور در همان thread ی که ساخته شده است اجرا گردد .
کد:
[align=left]Private Delegate Sub myDelegate(ByVal text As String)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim aDelegate As New myDelegate(AddressOf Receive)
        Me.Invoke(aDelegate, "Hello")
    End Sub[/align]
این کار بدین دلیل است تا جلوی بنبست گرفته شود .