You probably don't want to use multiple threads. Even on a multi-core processor, there is still only one path to the disk, so you probably won't get a performance boost (disk access is much slower than memory).
You have a good idea, though with loading and displaying small bits at a time. Just do it in one thread. Read about the first megabyte, show it, and do the following in the background, etc.
And you're right that you might need a separate thread for the GUI. This is one of the reasons BeOS was so incredibly responsive compared to other OSs of that time. He used many different threads for different tasks.
Just don't expect multiple threads to be read from disk.
Alternatively, you can use aio_read() for asynchronous I / O on Linux. If you use Windows, just try googling "windows asynchronous io" (I'm not quite sure how you do this, I don't use Windows).
Zifre source share