Just for completeness, there's one more way of executing data flows: Data-Decision-DDF-RunOptions.pxStartRun.
pxStartRun and pxRunSingleCaseDDF are activities for two specific use cases, the first one is used to trigger a batch run and the second one allows the user to submit a page for processing via data flow and extract the result at the end of the run. Technically the first one is an async run of a data flow with defined sources and destinations while the second one is a sync execution to be used with a data flow with Abstract source and destination so the input can be provided and the output can be extracted.
DataFlow-Execute is a friendlier way of executing runs. It takes into consideration the type of data flow that needs to be executed and exposes the possible operations to be executed like Browse, Save, Process and etc. (Please, refer to the help section for more details on this)
I recommend you use DataFlow-Execute to trigger a run as it supports all possible operations on data flows and is simpler to use.