I did a lot of work with printers a while back and the way that I achieved most of the functionality I wanted was through PInvoke.
As the answer from @Tsukasa states you "can" use WMI but that's another nightmare that's very difficult to deal with if you plan on actually deploying your solution anywhere other than your own machine.
As I'd mentioned: my suggestion would be to look into PInvoke. Keep in mind though that it has been a number of years/.NET Framework versions since I've worked in the print industry so Microsoft may have released a more elegant, easy-to-use solution that is native to .NET.
Here is a list of Print Spooler functions from the MSDN
Basically what you're going to want to do if you go this route is this:
Find the named handle to the print device in the Registry. This can be done with the registry classes available in the .NET framework. The name of the printer to windows will start with a "#" (or two) followed by some garbled junk and then a GUID. The key where all your printers are installed in the registry is here:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers
Call OpenPrinter with the printer name.
Call EnumJobs with the handle retrieved from OpenPrinter.
Call SetJob passing the Job Id retrieved from EnumJobs for the job you want to cancel. Be sure to pass the JOB_CONTROL_DELETE
Flag to cancel the job.
Call ClosePrinter, passing the handle retrieved from OpenPrinter. Don't forget this step. Windows/The print spooler gets very cranky if you do.
Again I can't stress enough that there is most-likely a better, more .NET way to do this. I suggest exhausting your options there first.
Good luck.