You cannot block the user interface thread (see "mre.WaitOne"). If you absolutely need WaitOne, you must run your code in a separate thread. This can be done as follows:
var t = new Thread(delegate()
{
mre.WaitOne();
});
, "mre.Set()" . , , , -, OpenReadAsync . , , .