0 / 0 / 1
Регистрация: 22.09.2014
Сообщений: 37
1
.NET 4.x

Как вызвать несколько раз метод после его окончания

04.11.2014, 17:10. Показов 5375. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно по нажатию на кнопку вызвать метод к примеру 5 раз.
Но вызывать метод повторно нужно только после его окончания.
Уже много чего перепробовал.
Вот пример вызова метода 1 раз.

Нажимаю на кнопку, вызывается метод:
C#
1
2
3
4
private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            StartLike();            
        }
Метод StartLike:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public void StartLike()
        {
            StartButton.IsEnabled = false;
            if (LikeCheckBox.IsChecked == true)
            {
                Task<string> LikeTurbo = VK.NakrytkaLike(KeyAntigateTextBox.Text, 3000);
                LikeTurbo.ContinueWith(task =>
                    {
                        LogAdd(LikeTurbo.Result); 
                        StartButton.IsEnabled = true;
                    }, TaskScheduler.FromCurrentSynchronizationContext());
            }
            else
            {
                StartButton.IsEnabled = true;
                LogAdd("Выберите вид накрутки.");
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2014, 17:10
Ответы с готовыми решениями:

Как вызвать функцию несколько раз подряд?
Здравствуйте! В ячейке А1 есть функция, к примеру СЛУЧМЕЖДУ (1,4), в нужный момент времени её...

TextToSpeech, как вызвать speak несколько раз подряд?
С основами разобрался... &quot;говорить&quot; умею... Пользуюсь tts.speak(&quot;hello!&quot;,...

Как создать метод и вызвать его
Всем привет. Вопрос заключается в следующем. Только начинаю изучать C# и столкнулся со следующей...

Передать метод как параметр и вызвать его
Доброго времени суток. Делаю XNA проект. Создаю игровое меню с кнопками. Меню - это класс, в...

8
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
04.11.2014, 17:27 2
Кто вам мешает сделать так:
C#
1
2
3
4
5
6
7
8
private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            StartLike();  
            StartLike(); 
            StartLike(); 
            StartLike(); 
            StartLike();           
        }
0
0 / 0 / 1
Регистрация: 22.09.2014
Сообщений: 37
04.11.2014, 17:31  [ТС] 3
Тогда второе и последующее вызывается до выполнения первого.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
04.11.2014, 17:36 4
skvoshiz, с чего такое утверждение? Пройдитесь дебагером и будете приятно удивлены.
0
0 / 0 / 1
Регистрация: 22.09.2014
Сообщений: 37
04.11.2014, 17:43  [ТС] 5
Да, выполняются не дождавшись окончания.
Для того чтоб поняли, вот VK.NakrytkaLike:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public static Task<string> NakrytkaLike(string KeyAntigate, int SleepTime)
        {
            return Task<string>.Factory.StartNew(() =>
            {
            try
            {
                using (var req = new HttpRequest())
                {
                    req.UserAgent = HttpHelper.ChromeUserAgent();
                    req.Cookies = cookie;
                    req.AllowAutoRedirect = false;
                    string infoLike = req.Get("http://turboliker.ru/index.php?page=likes&limit=1").ToString(); // Обновление странички
                    string UrlLikeFinal = "http://m.vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/"); // Ссылка на задание
                    string[] info = infoLike.Substring("onclick=\"check(", " )\">").Split(new char[] { ',', ' ' }); // Парсим ID задания и сколлько за него дадут
                    // Получаем ответ со странички Лайка
                    string pageLike = req.Get(UrlLikeFinal).ToString();
                    // Ошибка доступа.
                    if (pageLike == "") return ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";;" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";err;" + "Ошибка доступа." + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                    else 
                    {
                        //Ошибки добавления.
                        if (pageLike.Contains("service_msg service_msg_error")) return ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";;" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";err;" + pageLike.Substring("class=\"service_msg service_msg_error\">", "</div>") + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                        else if (pageLike.Contains("service_msg service_msg_null")) return ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";;" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";err;" + pageLike.Substring("class=\"service_msg service_msg_null\">", "</div>") + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                        else if (pageLike.Contains("/like?act=del&object")) return req.Get("http://turboliker.ru/core/likes_list_check.php?id=" + info[2]).ToString() + ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";" + info[4] + ";" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";l;" + "Лайк был уже добавлен." + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                        else
                        {
                            string TestCaptch = req.Get("http://m.vk.com/like?act=add&object" + pageLike.Substring("/like?act=add&object", "\"")).ToString();
                            // Капчи нет.
                            if (TestCaptch == "") return req.Get("http://turboliker.ru/core/likes_list_check.php?id=" + info[2]).ToString() + ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";" + info[4] + ";" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";;" + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                            else
                            {
                                // Капча есть. 
                                if (KeyAntigate == "") return ";;" + info[4] + ";" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";a;Введите ключ Antigate." + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                                WebClient wc = new WebClient();
                                wc.DownloadFile("http://m.vk.com/captcha.php?sid=" + TestCaptch.Substring("name=\"captcha_sid\" value=\"", "\">"), System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6) + "/Captcha/" + TestCaptch.Substring("name=\"captcha_sid\" value=\"", "\">") + ".jpg");
                                Task<string> TaskCaptcha = Captcha(KeyAntigate, System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6) + "/Captcha/" + TestCaptch.Substring("name=\"captcha_sid\" value=\"", "\">") + ".jpg");
                                wh.WaitOne();
                                req.AddParam("captcha_sid", TestCaptch.Substring("name=\"captcha_sid\" value=\"", "\">")).AddParam("captcha_key", TaskCaptcha.Result);
                                req.Post("http://m.vk.com/like?act=add&object" + pageLike.Substring("/like?act=add&object", "\""));
                                return req.Get("http://turboliker.ru/core/likes_list_check.php?id=" + info[2]).ToString() + ";" + req.Get("http://turboliker.ru/core/likes_list_pass.php?id=" + info[2]).ToString() + ";" + info[4] + ";" + req.Get("http://turboliker.ru/").ToString().Substring("id='gold'>", "&") + ";k;" + ";" + "http://vk.com/" + infoLike.Substring("onclick=\"openWin(1,'", "')").Substring(".com/");
                            }
                        } 
                    }         
                }
            }
           catch
            {
                return "lol";
            }
            });
0
Эксперт .NET
5490 / 4260 / 1211
Регистрация: 12.10.2013
Сообщений: 12,262
Записей в блоге: 2
04.11.2014, 17:49 6
skvoshiz, у вас тут не в методах дело, а в потоках... Вам не методы, а именно потоки необходимо синхронизировать.
Смотрите в сторону EventWaitHandler-а.
0
0 / 0 / 1
Регистрация: 22.09.2014
Сообщений: 37
04.11.2014, 17:51  [ТС] 7
Не правильно поставил вопрос, простите, а пример сможете привести? Или наглею уже?
0
Эксперт .NET
5490 / 4260 / 1211
Регистрация: 12.10.2013
Сообщений: 12,262
Записей в блоге: 2
04.11.2014, 17:57 8
Цитата Сообщение от skvoshiz Посмотреть сообщение
пример сможете привести?
В класс добавьте переменную:
C#
1
EventWaitHandler wh=new AutoResetEvent(false);
После первого (и последующих) вызовов метода поставьте строку:
C#
1
wh.WaitOne();
Перед возвратом значения из метода, что вы привели (между строками 39-40) поставьте строку:
C#
1
wh.Set();
Не забывайте про директиву:
C#
1
using System.Threading;
Как-то так. А дальше надо смотреть полностью ваше приложение, вы показали только один метод.
0
0 / 0 / 1
Регистрация: 22.09.2014
Сообщений: 37
04.11.2014, 18:14  [ТС] 9
Спасибо большое, вы уже отвечали мне это в другой теме, все буду прибывать)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2014, 18:14
Помогаю со студенческими работами здесь

Вызвать скрипт несколько раз
Всем доброго дня!) Eсть такой скрипт он работает но не совсем так как нужно &lt;script...

Как вызвать метод класса, если его имя находится в переменной?
Имеется такая конструкция class Content { function adminka() { $func =...

Вызвать класс параллельно несколько раз
У меня есть класс некоторого NPC который хаотично двигается по карте, как я могу заспаунить...

Как создать метод, чтобы его можно было бы вызвать из другого класса?
Как создать метод, чтобы его можно было бы вызвать из другого класса? Создаю в Form1.cs метод для...

Вызвать метод n-раз
Необходимо вызвать метод n-раз. Как это реализовать? static void Func() { ...

Вызвать несколько раз mmenu с одинаковыми настройками?
Доброго времени суток. Вызывается mmenu с настройками pupup. 5 форм, настройки одинаковые. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru