02-07-2009, 15:15
|
|
|
חבר מתאריך: 27.10.05
הודעות: 1,067
|
|
כמו שבהנת אסור סתם לשנות.
לכל אובייקט "גראפי" ב C# יש מאפיין InvokeRequired, זה מאפיין שיש לו רק GETTER והוא מחזיר TRUE כאשר ה THREAD שבו בדקת את המאפיין הזה הוא לא ה THREAD שיצר את האובייקט ו FALSE כמובן להיפך.
כל עידכון של אובייקטים גראפיים אמור להיראות כך:
קוד:
public delegate void updateTextboxDelegate(string _newtext);
public void updateTextbox(string _newtext){
if(m_Textbox.InvokeRequired){
updateTextboxDelegate f = updateTextbox;
m_Textbox.Invoke(f, _newtextm);
}else{
m_Textbox.Text = _newtexto;
}
}
כאשר INVOKE הוא סינכרוני (כלומר חוסם) ויש גם פונקציה BeginInvoke ו EndInvoke שהן אסינכרוניות (לא חוסמות).
זה הדרך לטפל בעדיכון פקדים ב C# ב multi-threading software. בהצלחה.
|