我已經實現了一個簡單的多線程服務器\客戶端遊戲作爲我大學的任務。爲什麼我的表單閃爍
上除了主線程客戶端有:
1線程負責畫圖玩的理由和形式對玩家的。
2線程與服務器通信以發送方向和接收的位置和其他信息。
首先我使用的調用技術,但因爲我用的是它的圖形配置後,沒有工作。看到Draw on a form by a separate thread
所以爲了避免和規範引出線,我只是升旗「的Invalidate」引出線上的每一個具體的時間,離開它的實際操作主線程:
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嗎?什麼是繪畫,繪畫盒,面板的控制? –