Here is an example on the knee using VkApi
internal class Program { private static VkApi _api; private static void Main() { const string email = "email"; const string pass = "password"; _api = new VkApi(); _api.Authorize(new ApiAuthParams { Login = email, Password = pass, Settings = Settings.Messages, ApplicationId = 0000 // vkAppId }); Thread pollMessagesThread = new Thread(PollUnread) { IsBackground = true, Name = nameof(pollMessagesThread) }; pollMessagesThread.Start(); pollMessagesThread.Join(); // для теста. } private static void PollUnread() { HashSet<string> messages = new HashSet<string>(); // желательно сделать expirableSet или время от времени чистить эту коллекцию while (true /*_shouldStop конечно же*/) { var msgs = _api?.Messages.GetHistory(new MessagesGetHistoryParams { UserId = 00000000 // Id пользователя c которым ведете диалог. }); foreach (var msgsMessage in msgs.Messages) { if (!messages.Contains(msgsMessage.Body)) { messages.Add(msgsMessage.Body); Console.WriteLine(msgsMessage.Body); } } Thread.Sleep(3000); } } }
UPD: another method PollUnread can be altered so that it would do something only if there are not read messages:
private static void PollUnread() { while (true /*_shouldStop конечно же*/) { var msgs = _api?.Messages.GetHistory(new MessagesGetHistoryParams { UserId = 00000000 // Id пользователя c которым ведете диалог. }); if (msgs.Unread > 0) { Console.WriteLine(msgs.Messages); // Unreaded messages. } Thread.Sleep(3000); } }