What did you expect a parallel operation to do? You use it when you want a number of tasks to proceed at the same time (or as close to the same time as the system and it's load will allow) - which means splitting the code up so that it runs on different cores at the same time. To do that, you need N + 1 cores: N for the number of task you are trying to execute simultaneously, plus one to set them all going.
To do that, each task must ruin in it's own Thread: this is the basic "unit of processing", and a thread is assigned to a core my the system (though which core may change while it's running - we'll ignore that and quite a lot of other complications for the sake of brevity here). Without a Thread, code can't execute!
When you app starts, it is given a Thread - called the UI Thread - and when that terminates, so does your application. But the UI Thread is special: it's the only Thread which is allowed to touch display controls (including Forms, they are Controls as well) - if any other Thread tries to access a control in any way you get a "Cross-threading exception" - which is what you are seeing. To access any control from a thread other than the UI thread, you have to do something complicated called Invoking the control, which "moves the code" back to the UI thread temporarily, and then return to your "normal thread" when it's done.
T
That's not difficult to do:
Control.Invoke Method (System.Windows.Forms) | Microsoft Docs[
^] shows you how - but you need to think very, very carefully about exactly what you are doing as once you exceed the number of cores available in your system you can start to slow things down dramatically, and it's very, very easy to make your code slower, more memory hungry, and les reliable by generating too many threads. Remember, each Thread needs it's own stack, so that's at least 2MB of memory overhead per thread you create, plus the overhead in memory allocation, Thread switching, and so on involved.
And your code tries to create 500 threads - in a system which is likely to have 2, 4, or 8 cores - but probably nowhere near 500!
As a general rule of thumb: give the Thread count as low as possible, and certai9nly never exceed twice the number of cores!