sh
شنبه 09 اردیبهشت 1385, 20:46 عصر
در یه برنامه که قراره وزن باسکول رو بخونه و در یه فرم نشون بده با تظیمات کامپوننت سریال پورت ویژوال استدیو موفق به خوندن وزن در هر لحظه شدم در مثالی که از کدهای اون استفاده کرده بودم گفته بود که از متد DataReceived کامپوننت SerialPort حتما باید با استفاده از یک Delegate مقدار رو در هر لحظه به یه TextBox داد من این کار رو طبق کد زیر انجام دادم و مشکلی نیست ولی به محض خروج از فرم پیغام خطای زیر رخ میده
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
چون تا حالا از Invoke استفاده نکردم اگر ممکنه دوستانی که کار کردند یه توضیحی در این خصوص بدن که چرا اینجا از Delegate و Invoke استفاده شده و راه حل این مشکل چیه
ممنون
PublicDelegateSub myDelegate()
PublicSub updateTextBox()
With TextBox1
.Clear()
.AppendText(serialPort.ReadExisting)
EndWith
EndSub
----------------------------------------------------
PrivateSub DataReceived(ByVal sender AsObject, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
TextBox1.Invoke(New myDelegate(AddressOf updateTextBox), NewObject() {})
EndSub
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
چون تا حالا از Invoke استفاده نکردم اگر ممکنه دوستانی که کار کردند یه توضیحی در این خصوص بدن که چرا اینجا از Delegate و Invoke استفاده شده و راه حل این مشکل چیه
ممنون
PublicDelegateSub myDelegate()
PublicSub updateTextBox()
With TextBox1
.Clear()
.AppendText(serialPort.ReadExisting)
EndWith
EndSub
----------------------------------------------------
PrivateSub DataReceived(ByVal sender AsObject, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
TextBox1.Invoke(New myDelegate(AddressOf updateTextBox), NewObject() {})
EndSub