Let’s try to put it in other words:
An Argument acts like a Variable inside the workflow it is declared in. This means that inside that workflow, you can use it the same way you would use any other variable. Functionally there’s basically no difference.
But, an Argument also interacts with it’s calling workflow.
InArgument gets the initial value from the Invoke.
OutArgument returns it’s last value through the Invoke.
InOutArgument does both.
So, in practice:
Main.xaml invokes Child.xaml
Child.xaml has an InArgument(Of Int32). Whatever is passed as the value for that Argument will be it’s starting value (it can be changed inside the workflow).
Child.xaml has an OutArgument(Of Int32). Whatever is the last value of that Argument will be passed back to Main.xaml and stored in the variable you put there.
Child.xaml has an InOutArgument(Of Int32). Current value of the variable you put will be passed as the starting value and whatever the end value is will be stored back in Main,xaml in that same variable.
I don’t know if that clears anything, but hopefully at least the first part will be understandable.