You can just specify how much of the image you want to draw in the spriteBatch.Draw() method, like so: (Variable declaration is only for self-documentation)
height = Math.Max(height + 1, 500);
Rectangle destinationRect = new Rectangle(0, 0, 500, height);
Rectangle sourceRect = new Rectangle(0, 0, 500, height);
spriteBatch.Draw(my500x500Texture, destinationRect, sourceRect, Color.White);
All this does is draw one more pixel of the background texture every call until it reaches the full height of the image (500 in the example). Note that render speeds will be different on different machines, so you will likely want to base the draw height on the gametime to be more consistent.
To draw random one-line segments of the image, I would use one draw statement per line and draw each line like so:
lineY = 42; // Figure this part out yourself, and loop this somehow
Rectangle destinationRect = new Rectangle(0, 0 + lineY, 500, 1); // Drawing at (0,0)
Rectangle sourceRect = new Rectangle(0, lineY, 500, 1);
spriteBatch.Draw(my500x500Texture, destinationRect, sourceRect, Color.White);