Си диез / Говнокод #19533 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
if (p != null)
{
    Thread thread = new Thread(() =>
    {
        StaffList.App.Controls.Personal.PersonRec rec = new Controls.Personal.PersonRec();
        rec.DataContext = p;
        rec.Mode = StaffList.Controls.OperatingMode.Show;
        var win = new BaseWindow();
        win.Form = rec;
        win.ShowDialog();
    });

    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

Это мы так делаем немодальные окна.

Запостил: kerman kerman, (Updated )

Комментарии (74) RSS

  • C# нормально работает с GUI из левых тредов? Офигеть, редко где такое встретишь...
    Ответить
    • Только до того момента, когда понадобится изменять свойства гуевых объектов
      Ответить
    • Нет, конечно. Как раз для этого товарисч влепил туда ApartmentState.STA, что, по сути, означает запуск кода в GUI потоке.
      Ответить
      • > означает запуск кода в GUI потоке
        Бред
        STA делается для того, чтобы созданный поток и любой другой не взаимодействовали через COM, ибо WinForms/WPF писали пидоры, не могущие в многопоточность
        Ответить
        • Покажи мне гуи-фреймворк, который в неё может...

          Я почему и удивился, когда увидел этот код.
          Ответить
          • 2016 год на дворе, никто не смог придумать не то что многопоточные гуй-фреймворки, а вообще хоть какие-то адекватные гуй-фреймворки
            Ответить
              • ну, для hello world нет.
                меня тут как-то попросили написать mailer, который будет рассылки делать. что нужно было реализовать:
                поля отправитель, адресат
                тело письма
                подпись
                коннект к оракловой базе, и запрос (обычно страницы на две)
                возможность вложить результат запроса в html в тело письма
                возможность вложить результат xlsx файл с форматирование в определенные поля, при чем на разные листы разные запросы и коннекты
                запаковка в zip с паролем и без
                возможность выложить на сетевую шару
                возможность выложить на FTP
                возможность выложить на корпоративный файлообменник

                вроде ничего не забыл, но суть-то в том, что когда меня попросили это сделать, они хотели все это передавать в аргументах.
                Ответить
                • Просто борманд обычно умные вещи говорит, ты не замечал?
                  Ответить
                  • Нет, он с умным видом говорит банальные вещи. Но конкретно тут - если всяким прыщехуесосам не нужен гуй, то ради клиентов придется ведь его сделать? Или тут все исключительно бекенды пилят?
                    Ответить
            • > никто не смог придумать не то что многопоточные гуй-фреймворки

              Thread confinement (раздели данные по потокам, взаимодействуй через очереди) - отличная техника, я в последнее время всё чаще её использую, совсем не для гуя. На ней Chromium зиждется (https://www.chromium.org/developers/design-documents/threading).
              Ответить
              • а с крестах нет переключений между контекстом тредов?
                Ответить
                    • > между контекстом тредов?
                      > Task'ах в c# нет переключений контекста

                      Очевидно потому, что таски - это не треды.
                      Ответить
                      • вообще, таски это синтаксический сахар по сути. но они так же как и треды ловят эксепшен при попытке напрямую изменения UI контролы, который не был создан в этом же треде/таске.
                        Ответить
                        • > так же как и треды
                          Я не знаю шарп, но таски же исполняются в фоновых worker тредах? Тогда вполне логично, что им надают по рукам за обращение к UI.
                          Ответить
                          • > Я не знаю шарп, но таски же исполняются в фоновых worker тредах?
                            Да, у CLR есть свой тредпул для тасков
                            Ответить
              • А жавоидный гуй разве не так работает - все действия добавляются в синхронизированную очередь, откуда их достает гуевый тред?
                Ответить
    • Дефолтовый жавовский гуй вроде работает нормально. Ты сишкой не упоролся?
      Ответить
      • В AWT/Swing всё взаимодействие с гуём должно происходить в потоке EDT. Именно поэтому в main'е каждой свинговой программе используется invokeLater.
        Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8