텍스트를 텍스트 상자에 쓰고 싶습니다. 다른 스레드에서이를 수행 할 수 있도록 invoke 및 textbox-writing을 보유하는 unstatic 메서드를 호출하는 정적 메서드를 호출합니다. 이럴 때. 창 핸들이 설정 될 때까지 호출 할 수 없다는 오류가 발생하므로 설정하고 있습니다. 단지 BeginInvoke 코드가 아니라 실제로 텍스트 설정 내 문제는 코드에서 아래루핑/크래싱 호출
if (!this.IsHandleCreated)
this.CreateHandle();
의 위치가 내 프로그램이 충돌하지 않는 유일한 사람이라고,하지만 지금은 (indefinetly) 루핑 것 아래 코드를 참조하십시오. 내가 도대체 뭘 잘못하고있는 겁니까?
코드 : txtServerLog가 true로 InvokeRequired 때마다, 당신이를 호출하고, 때문에
내 스레드에서private void ActualLog(string input)
{
var currentForm = form as Main;
if (!this.IsHandleCreated)
this.CreateHandle();
if (currentForm.txtServerLog.InvokeRequired)
{
this.BeginInvoke(new Action<string>(ActualLog), new object[] { input });
return;
}
else
{
currentForm.txtServerLog.Text += input + "\r\n";
currentForm.txtServerLog.Refresh();
}
}
public static void Log(string input)
{
Main main = new Main();
main.ActualLog(input);
}
, 나는 지금까지 내가 말할 수있는 Log("Any String");
@JanH. 100 % 확신 할 수는 없지만 위의 샘플을 포함 시켰습니다. – furkle
고마워요! 귀하의 예제에서 BeginInvoke 대신 Invoke를 사용하면 작동합니다. 두 함수가있는 것은 단지 Annot Thread에서 Log()를 호출 할 수 있었기 때문에 Invoke는 정적 함수에서 허용되지 않았으므로 (그래서 나는 그것을 정적이 아닌 정적 변수에 넣고 정적 변수에서 호출 함). 하지만 어쨌든 고마워요 :) –
@JanH. 아, WPForm에서 WinForms보다 많은 시간을 보냅니다. Invoke/BeginInvoke 구별에 조금 녹슬 었습니다. 그것을 듣고 다행 도움이! – furkle