Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Избавится от инвоке / 7 сообщений из 7, страница 1 из 1
16.12.2016, 14:22
    #39368664
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
есть такой код. в цикле выполняется статический метод :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        private void button1_Click(object sender, EventArgs e)
        {
            List<int> lst = new List<int>();
            for (int i = 0; i < 10; i++)
            {
                Thread myThread = new Thread(() => ThreadRun.run(i, textBox1));
                myThread.Start();
                Thread.Sleep(50);
            }
        }




Код: 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.
    public  class ThreadRun
    {
        public static void run(int num, TextBox textBox)
        {
            addtexbox(num + "\n", textBox);
        }

        public static void addtexbox(string st, TextBox tb1)
        {
            st += "\n";
            if (tb1.InvokeRequired) tb1.Invoke(
            new Action<string>((s) =>
            {
                tb1.SelectionStart = tb1.TextLength;
                tb1.SelectionLength = st.Length - 1;


                tb1.AppendText(st);
            }), st);
            else
            {
                tb1.SelectionStart = tb1.TextLength;
                tb1.SelectionLength = st.Length - 1;

                tb1.AppendText(st);
            };
        }
    }


Как это сделать не через инвоке? Хотелось бы подписаться на события, но в статических классах и использовать нельзя, я так понимаю. хочу вместо нескольких инвоков подписаться на одно событие , и далее его использовать. Какой для этого паттерн ?
...
Рейтинг: 0 / 0
16.12.2016, 14:37
    #39368689
Stibrus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
Я завел себе в проекте для этого отдельный компонент, назвал его FormManager. При старте приложения регистрирую в нем главную форму, чтобы иметь привязку к UI потоку (запоминаю в приватной переменной компонента). В компоненте прописал такой метод:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        public void InvokeUsingUIThread(Action function)
        {
            try
            {
                if (_MainForm.InvokeRequired)
                    _MainForm.Invoke(function);
                else
                    function.Invoke();
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                    throw ex.InnerException;
                else
                    throw;
            }
        }



И если надо что-то сделать гарантированно в UI потоке из не-UI потока, делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
                ServiceLocator.Resolve<IFormManager>().InvokeUsingUIThread(() =>
                {
                  tb1.SelectionStart = tb1.TextLength;
                  tb1.SelectionLength = st.Length - 1;
                  tb1.AppendText(st);
                });
...
Рейтинг: 0 / 0
17.12.2016, 05:28
    #39369133
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
async - await
...
Рейтинг: 0 / 0
22.12.2016, 11:27
    #39372667
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
через випифи решил всё.

App.Current.Dispatcher.BeginInvoke+ DispatcherHelper.CheckBeginInvokeOnUI
...
Рейтинг: 0 / 0
22.12.2016, 15:27
    #39373051
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
Erik_Kartmannчерез випифи решил всё.

App.Current.Dispatcher.BeginInvoke+ DispatcherHelper.CheckBeginInvokeOnUIДумаешь Dispatcher сделал чудо? Я его использую если необходимо применять изменяющиеся данные в качестве источника данных для всяких контролов.
...
Рейтинг: 0 / 0
23.12.2016, 08:50
    #39373465
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
fortibransa, это то, что мне было нужно. И с радостью сделал всё в впф
...
Рейтинг: 0 / 0
23.12.2016, 13:40
    #39373732
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Избавится от инвоке
Erik_Kartmannfortibransa, это то, что мне было нужно. И с радостью сделал всё в впфЭто (подобное) и в винформс делается, если надыть.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Избавится от инвоке / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]