IR
irwinrodriguez.dev
FC Perpetual license · One-time payment

A heavy process freezes your VFP application's interface until it finishes.

Background tasks. Always-responsive UI.

Run heavy processes (imports, reports, API calls) without blocking your VFP application's interface. Each task runs in its own VFP process, with the code you already have: up to 64 at a time, and by default as many as you have cores, capped at 8.

Who it is for
  • Imports
  • Reports
  • API calls
  • Batches and data sync

No credit card. Verify your email and you get 30 days of a full license (not a cut-down build) for FoxServer, FoxCore, FoxBridge, FoxAgent, FoxCli and FoxCli MCP, installer included, in your portal. One per person and product; after 30 days it expires.

Features

Async execution

Launch VFP tasks in the background. The UI stays fully responsive while work happens in parallel.

Progress and cancellation

The task reports with runtime.Progress(0-100, message) and the form reads it with GetProgress(). And it asks runtime.IsCancelled() on each turn, so the Cancel button really works.

The worker calls back

From the script, runtime.Call() runs a handler of yours in the main process, and GetValue()/SetValue() are a blackboard shared by both.

From 1 to 64 processes

MaxWorkers to suit your hardware; the rule of thumb is physical cores. For batches, data sync and reports.

Total isolation

The worker does not see your variables, your work areas, your SETs or your cursors. It is born clean and opens what it needs: the product's best property, and also its biggest restriction.

One license per company

Seats and copies are not counted: the same JWT covers your whole team and ships inside the .exe you hand your customers.

How it works

  1. 1
    Start the engine once

    loRt = CREATEOBJECT('FoxCore.Runtime'), loRt.Activate(lcJwt) and loRt.Attach(_VFP). The license is a JWT you pass in code: there is no file to copy.

  2. 2
    Fire the work and move on

    loRt.RunScript(lcScript, 'MyTask') returns the task id straight away: the VFP script runs in another process and your form stays responsive.

  3. 3
    Collect the result

    With that id: GetProgress() for the bar, IsCompleted() to know when it finished and GetResult() for the value. On exit, loRt.Shutdown().

Price

One license per company. One-time payment, no seats to count. The version you buy works forever.

License
299 €
Optional renewal: 75 € a year
One per company, with no limit on developers. One year of updates included, and you ship it inside your .exe without counting copies. Activated in code with Activate().
Buy

Frequently asked questions

How many tasks can I run in parallel?
MaxWorkers goes from 1 to 64, and defaults to min(cores, 8). The rule of thumb is the physical cores of the machine: above that the processes get in each other's way. And mind the fixed cost: starting a worker takes between a tenth of a second and three seconds, so a 200 ms task does not pay off.
Do tasks share memory with the UI?
No. Each task runs in a separate VFP instance. They do not share global variables, SET commands or cursors with the main thread.
Can I access DBFs from tasks?
Yes, but with caution. Each instance opens its own connections. Use tables in shared mode (SET EXCLUSIVE OFF) and avoid concurrent writes without coordination.
Does the license cover all my development installations?
Yes. It is one license per company: seats and copies are not counted, and the same JWT works on every machine you develop on and inside the .exe you hand your customers. If you bought a 1, 4 or 8 seat license earlier, it still works exactly as before.
What happens if a task throws an error?
The task goes to Failed and GetError(id) brings the message. If the task runs past its deadline it ends as TimedOut and the worker dies. There are no OnComplete or OnFailed events: you ask with IsCompleted(), or with PollCompleted() when the batch is large.
What happens when maintenance ends?
The license stays valid and what you bought keeps working. What gets bounded is how far up the versions you go: you are entitled to every version published up to the day it expires, and the portal applies that rule on download, serving you the latest one you are entitled to rather than the newest. Renewing is optional and you ask for it by writing to soporte@irwinrodriguez.dev.

No more frozen UIs in your VFP apps

Install FoxCore and have your first background task running in minutes.

Buy now