PDA

View Full Version : سوال: مشکل در کد چت



hesam_aria_1
یک شنبه 17 اردیبهشت 1391, 22:10 عصر
سلام
من یه کد برای چت دارم چند تابع داره که براتون میزارم میخام بدونم که این تابع ها دقیقا چیکار میکنه .....



private void ShowReceivedData(string text)
{
if (this.txtReceiveString.InvokeRequired)
{
receivedData d = new receivedData(ShowReceivedData);
this.Invoke(d, new object[] { text });
}
else
{
text = text.Remove(text.Length - 5);
string[] temp = allReceivedData.Split('\n');
txtReceiveString.Lines = temp;
}
}

private void GetSendingData()
{
if (this.txtSendString.InvokeRequired)
{
receivedData d = new receivedData(ShowReceivedData);
this.Invoke(d, new object[] { });//
}
else
SendBuffer = Encoding.ASCII.GetBytes(txtSendString.Text + "<EOF>");
}


مشکلم invoke و invokerequire ......
از همتون ممنون ....

hesam_aria_1
دوشنبه 18 اردیبهشت 1391, 13:12 عصر
کسی با این تابع ها کار نکرده ........... کمکم کنید.....

d_derakhshani
دوشنبه 18 اردیبهشت 1391, 14:01 عصر
این تابع ها که عمومی نیست که کسی باهاش کار کرده باشه. کلاس receivedData رو از کجا آوردید؟فقط واضحه که با thread نوشته شده و برای همین که تو کد از invoke استفاده شده.

hesam_aria_1
دوشنبه 18 اردیبهشت 1391, 14:27 عصر
بخشی از کد رو که متوجه نشدم رو گذاشتم .....

مشکل من هم invoke و invokerequire هست

میخام بدونم مثلا invoke کلا چه کاری انجام میده ...... و چه زمانی استفاده میشه ....

d_derakhshani
دوشنبه 18 اردیبهشت 1391, 16:43 عصر
در win app کل برنامه شما در یک thread انجام میشه و فقط همون thread می تونه به صورت مستقیم با کنترل ها کار کنه. در نتیجه نمی تونید وقتی یک thread جدید میسازید مستقیم به کنترلهای دسترسی پیدا کنید.
برای اینکار باید از Invoke استفاده کنید. invokerequire بررسی میکنه آیا در شرایط thread safe هستید یا خیر(اگه نباشید true بر می گردون) و در این وصرت باید عملیات invoke رو انجام بدید