StrokeThicknessのせいですが、申し訳ないことに勉強不足なため具体的な説明はできません。
単に塗りつぶすだけなら、Lineをたくさん並べるのではなく、System.Windows.Shapes.Rectangleを
1つ配置して、それのHeightを徐々に増やしていくほうがいいでしょう。
あと、DoEventsではなくてasync/awaitを使うことをお勧めします。
async Task Event() {
var rect = new Rectangle();
rect.Width = canvas.ActualWidth;
rect.Height = 0;
rect.Fill = Brushes.Black;
canvas.Children.Add(rect);
for (double i = 0; i < canvas.ActualHeight; i++) {
rect.Height = i;
await Task.Delay(5);
}
}
// XAMLならStoryboardでアニメーションさせる方法もあるけど、
// 長いこと書いてないので書き方を忘れた…。