public static Task <string> RequestStringAsync(this IEventProvider cls)
    {
        var tcs = new TaskCompletionSource <string>();
        EventHandler <string> handler = null;

        handler = (o, s) =>
        {
            tcs.SetResult(s);
            cls.StringAvailable -= handler;
        };
        cls.StringAvailable += handler;
        cls.RequestString();
        return(tcs.Task);
    }