首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# WinForms DrawLine 迴圈只畫一次:Random 種子重複問題

     編輯:程式設計綜合問答

問題代碼

for (int i = 0; i < 25; i++) {
    Random r = new Random(); // 每次迴圈新建實例
    int r1 = r.Next(bp.Width);
    // ...
}

原因

new Random() **預設以當前時間 (Ticks) 為種子**,迴圈執行極快,**多次實例化在同一毫秒內**,種子相同 → 產生**完全相同的隨機數序列** → 25 條線重疊在同一位置,視覺上像只畫了一次。

修正

Random r = new Random(); // 移到迴圈外,單一實例
for (int i = 0; i < 25; i++) {
    int r1 = r.Next(bp.Width);
    int r2 = r.Next(bp.Width);
    int h1 = r.Next(bp.Height);
    int h2 = r.Next(bp.Height);
    using (Pen p = new Pen(Color.Silver)) { // using 確保釋放
        g.DrawLine(p, r1, h1, r2, h2);
    }
}
pictureBox1.Image = bp; // 迴圈結束後一次性指派,減少重繪

補充優化

  • Thread.Sleep(10) 是**錯誤的延遲手段**,會阻塞 UI 執行緒導致介面卡頓。
  • 大量繪圖建議用 **Double Buffering**:pictureBox1.DoubleBuffered = true; 或在 Bitmap 畫完後一次 Invalidate()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved