문제는 매우 흥미 롭습니다. 무한 루프를 사용하면 양식이 업데이트되지 않습니다 (텍스트 상자가됩니다). 그러나 messageBox를 추가하면 messageBox가 표시되면 양식이 업데이트 된 것처럼 보입니다.
public Form1()
{
InitializeComponent();
var timer1 = new Timer
{
Enabled = true,
Interval = 150
};
timer1.Tick += timer1_Tick;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = Cursor.Position.X.ToString();
}
당신은 일반적으로에 무한 루프를 사용하지 않아야합니다 : 당신은 타이머를 사용하여 동일한을 달성 할 수
Task.Run(async() => await Task.Run(() =>
{
while (true)
{
textBox1.Invoke(new Action(() => textBox1.Text = Cursor.Position.X.ToString()));
Thread.Sleep(150);
}
}));
: 그래서 당신이해야 할 모든 비동기 상황에 무한 루프를 넣어하는 것입니다 그렇지 않으면 UI가 멈추기 때문에 양식 응용 프로그램의 주 스레드입니다. 실제로 textBox1.Invoke
을 사용했음을 알 수 있습니다. 사용자가 만든 스레드 이외의 다른 스레드에서 UI 요소에 액세스 할 수 없기 때문입니다.
이 그러나 MouseMove
이벤트 처리하는 것입니다 해결하기 위해 더 우아한 방법 :이 생각하는 것처럼, 나 또한 위치가 표시되는 방식을 변경
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
textBox1.Text = $"Mouse location: {e.Location.X}, {e.Location.Y}";
}
이 (내가
보간 문자열 사용을) 좀 더 아름답습니다.
비동기 프로그래밍에 대한 자세한 내용은 다음을 참조하십시오. https://msdn.microsoft.com/de-de/library/mt674882.aspx
전체 프로그램입니까? 그리고 메시지 상자가 표시되면 textBox1이 업데이트됩니까? Sleep 행에 중단 점을 추가하고 cursorPosition의 값을 확인하려고 이미 시도 했습니까? – MetaColon
그게 button_Click 코드. 예, messageBox1이 업데이트 된 것으로 표시되면 messageBox1이 표시됩니다. 이미 시도하고 Cursor.Position은 문제가 텍스트 상자에 쓰는 올바른 값을 읽습니다. –
폼이나 패널에서 MouseMove 이벤트를 구독하고 –