Hi anahita87,
On XP, ShuggyCoUk is correct. The first thing to do is simply lower the thread priority to something below 8. This will mean that any other thread or process that is running with priority 8 or greater will always run instead of your thread. Note, I do not recommend simply setting your process priority to <8, just the thread (or threads) you want to run 'nicely'.
As Shuggy has pointed out, the issue isn't he CPU time - it is the I/O your service is generating. On XP, all I/O's are treated the same - so your I/O has the potential to interfere with other things.
Vista (and soon on Win7) has two things designed to do exactly what you want.
The first is the Windows Task Scheduler. You can use this to schedule things to run at "system idle time". This when the system isn't busy, and the user is not present.
The second is Low Priority I/O. This allows your code to schedule I/O at a lower priority than other I/O.
Both of these together can be used to develop code that is a good system citizen.
Note, you should also take mobile systems into account by scaling back or disabling your background item when the system is running on batteries. You can be simple about this - simple turning off on battery power; or sophisticated, taking the Power Scheme into account, and using that as hint from the user.
Since you are working on writing a service that is a good system citizen, you can do a few other things as well.
1) You could monitor the amount of work done over time and slow down or stop if enough progress has been made.
2) Do pay attention to your memory footprint - the smaller the better. This often goes without saying, but it is particular important for services as they run 24/7.