Set up a BackgroundWorker and do the work in there. Then use the progress reporting mechanism to pass the new values to the UI thread via the event, and load the Listbox from that (if you really need the listbox). The thread then sleeps until the next time, and goes back round.
But it's not a nice way to do it - Access is not good at multiuser support at the best of times. If you can, use an SQL database, and if you are processing new or changed records only, set up an SQL Trigger to kick off the re-calculation instead of a timer:
https://msdn.microsoft.com/en-us/library/938d9dz2.aspx[
^]