the answer is easy. The program crashes because of the unhandled exception. And the exception is unhandled because the customer has not handled it. This can be seen from the call stack in "OPC Crash 1.PNG", where the customer calls the WriteItemValue method, and the method throws OpcException.
The call to WriteItemValue should be surrounded with try/catch, and handle the OpcException. These are exceptions that have their origin in the OPC communication (either come form the server or the client side), therefore cannot be always ruled out, and the customer's code must be able to cope with them.
A customer of mine had his OPC Data Client application crash one night. He was able to provide an Unhandled Exception from the Event Viewer. (See OPC Crash 1.PNG attached)
Here are other details I was able to obtain:
Win7 Pro x86
.NET Framework 4.7.1
OPC Data Client 188.8.131.52
Visual Studio Professional 2017
Think & Do OPC Server
I have not heard back from him in a couple weeks, so this could have been a one time occurrence, but I have followed up with him and wanted to see if you any idea of what could have happened based on the error, in case he does resurface.
There are two other screenshots that he provided, but I do not believe those are very helpful. Please let me know if there is anything else that you need.