One of the challenges with change events is how to determine that they happened. It catch every possible bit flip, you would need double the buffer for the whole tag in order to do a complete binary comparison. You could get a really good approximation by calculating a very good hash (maybe SHA256 or something) but that isn't ideal when you have a single 4-byte int tag value.
You can roll your own change event handler in C by hooking onto the existing callback system, waiting for a READ event to complete, then using the API call to get the raw bytes of the tag and doing whatever comparison you want. If I added a PLCTAG_EVENT_CHANGED event type and an API call to inject events, it would be even easier. Maybe I'll do that...
Tim's example above is a good one for .Net!
Best,
Kyle