Unfortunately, there is no way to copy a .NET desktop application to a compact framework based system. The compact framework does only support a subset of the .NET library.
Two typical problems while migrating a multi-threaded application to the Compact Framework can be solved as following:
The first issue appears when using the Sleep-method of threads.
System.TimeSpan yield = new System.TimeSpan(10);
System.Threading.Thread.Sleep(yield);
The compact framework does not support any signature accepting TimeSpan as parameter. Simply convert the value to an integer using the milliseconds solves this one.
System.TimeSpan ts = new System.TimeSpan(10);
int yield = ts.Milliseconds;
System.Threading.Thread.Sleep(yield);
More complex is the usage of the WaitOne-method. WaitOne only provides a signature without any parameters on the compact Ffamework. A simple solution is the usage of the following PInvoke
[System.Runtime.InteropServices.DllImport("CoreDll.dll")]
private extern static Int32 WaitForSingleObject(System.IntPtr Handle,System.Int32 Wait);
Using this you can substitute calls similar to this
foo.WaitOne((int)((bar - System.DateTime.Now.Ticks), false);
by the flowing lines to achieve the same result:
System.IntPtr hProcess = foo.Handle;
System.Int32 wait = (int)((bar - System.DateTime.Now.Ticks));
WaitForSingleObject(hProcess, wait);