대학용 과제로 간단한 멀티 스레드 Server \ Client 게임을 구현했습니다. 메인 스레드에 추가하여 클라이언트 측에서 내 양식이 깜박이는 이유
이 있습니다플레이 그라운드 양식에 선수를 그리기의 책임이 1 스레드.
2 스레드가 서버와 통신하여 방향을 보내고 위치 및 기타 정보를 수신합니다.
처음에는 호출 기술을 사용했지만 폐기 한 후에 그래픽을 사용했기 때문에 작동하지 않았습니다. Draw on a form by a separate thread
때문에 도면 실을 것을 방지하고 정례화하기 위해, 난 그냥 플래그 '무효화'도면 스레드의 모든 특정 시간을 높여보고 메인 쓰레드에의 실제 처리를두고 :
public Form1()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
InitializeComponent();
}
private void Draw()
{
while (true)
{
Thread.Sleep(200);
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (map.hasGraph)
{
map.Draw(e.Graphics);
if (this.Index != null)
e.Graphics.FillRectangle(Brush, Rectangle);
if (OpponentIndex != null)
e.Graphics.FillRectangle(OpponentBrush, OpponentRectangle);
}
}
이중 버퍼링을 사용하고 있는데도 형식이 임의의 방식으로 깜박이고 도면 스레드의 절전 시간을 늘릴 때 깜박임이 줄어들지 만 200ms는 이미 너무 많다고 생각합니다. 어떤 조언이 필요합니까?
[편집]
내가 (이 바보 생각 될 수있다) 코드에서 문제를 만든 속성 편집기에서 이중 버퍼링 플래그를 설정하고있어 실현하지만 난 내 테스트를 반 시간을 보냈다 플래그 중 하나와 함께 코드와 함께 두 장소에서 두 번 버퍼링 플래그를 설정하면 문제가 제기, 내 문제가 해결되었지만 지금이 문제를 해결할 수 있을지 알고 싶습니다.
가 표시 타이머 틱에 형성 이미지
블랭크 된 이미지를 블랭크하고 그 위에 버퍼링 된 이미지를 그릴 경우 발생할 수 있습니다. 마지막 이미지를 버퍼링 한 이미지가 아닙니다. – Doomsknight
winforms라고 가정 할 수 있습니까?페인팅, picturebox, 패널 .... 컨트롤 무엇입니까? –