Так, я возвращался в некоторое программирование.NET, и через новую возможность в VS.NET 2010, оно обнаружило случай, откуда я пытался изменить управление потока, который не создал то управление и указал на меня на статью о MSDN о том, как Вы делаете это правильно...
' HOW TO WRITE TO A FORM CONTROL FROM A THREAD THAT DIDN'T CREATE THE CONTROL
' ===========================================================================
' Say you need to write to a UI text box that logs stuff...
Delegate Sub WriteLogDelegate(ByVal [text] As String)
Private Sub WriteLog(ByVal [text] As String)
If Me.rtfLog.InvokeRequired Then
' We are not in the same thread!
' Create new WriteLogDelegate and invoke it on the same thread
Dim d As New WriteLogDelegate(AddressOf WriteLog)
Me.rtfLog.Invoke(d, New Object() {[text]})
Else
' We are totally in the same thread...
' Call AppendText like normal!
Me.rtfLog.AppendText([text])
End If
End Sub
И я был так взволнован, потому что я был озадачен тем, как сделать это в течение подобных 5 лет, потому что предыдущие версии vs.net не отметили это, так как я был старшекурсником на проекте и...
Umm... Жаль поединок это. Самообладание возвращено. Так или иначе, теперь, когда я знаю этот бит.NET-fu, я хотел бы узнать больше о том, что продолжается и как он работает.
Где я могу найти, что код для Вызывает () в Отражателе.NET?
Давайте назовем все, что происходит в вашем примере.
В целом рефлектор может показать вам реализацию, но идею вы можете найти в статье .
Если вы уверены, что хотите увидеть реализацию, просто скомпилируйте короткий код, как в ответе «поэта кода», и посмотрите на него в Reflector . (Я проверяю эту часть, отражатель покажет вы что-то, что довольно близко к вашему исходному коду.)
Это должен быть комментарий, но его нельзя форматировать в комментариях, так что ....
Если бы вы использовали C #, эта история могла бы стать еще проще ..
private void WriteLog(string text)
{
if(InvokeRequired)
{
BeginInvoke(new MethodInvoker(()=>{ WriteLog(text); }));
}
else
{
rtfLog.AppendText(text);
}
}
Вот Control.Invoke на MSDN: http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx