This was just a simple example of one way that you can use the .NET Threading syntax which happened to use a static method. If you need to use an instance method with threading you can do this as follows:
$set ilusing"System" $set ilusing"System.Threading" program-id. Program1 as "testthreading.Program1". data division. working-storage section. 01 any-key pic x. procedure division. declare thread1 as type Thread declare myobject as type ThreadWork = new ThreadWork declare threadDelegate as type ThreadStart = new ThreadStart(myobject::DoWork) set thread1 to new Thread(threadDelegate) invoke thread1::Start perform varying i as binary-long from 0 by 1 until i > 3 display "In Main" invoke type Thread::Sleep(100) end-perform accept any-key goback. end program Program1. class-id ThreadWork. working-storage section. method-id DoWork public. procedure division. perform varying i as binary-long from 0 by 1 until i > 3 display "Working Thread..." invoke type Thread::Sleep(100) end-perform goback. end method. end class.
If you do wish to use a static method that does file handling then the file itself should be defined as static or you will get errors.
Example:
class-id ThreadWork. select optional test-file assign to "testfile.dat" organization is line sequential file status is file-status. file section. fd test-file static. 01 test-record pic x(20). working-storage section. 01 file-status pic x(2) static. method-id DoWork static. procedure division. open extend test-file display "open = " file-status perform varying i as binary-long from 0 by 1 until i > 3 display "Working Thread..." move i to test-record write test-record invoke type Thread::Sleep(100) end-perform close test-file goback. end method. end class.