Как определить, находимся ли мы в потоке пользовательского интерфейса?

  1. установить пакет readline-devel.
  2. перекомпилировать python с модулем readline
  3. Bingo!
13
задан John Saunders 27 July 2010 в 06:27
поделиться

4 ответа

Я бы предположил, что именно такое решение должен принять вызывающий. Вы всегда можете написать методы оболочки, чтобы упростить задачу, но это означает, что у вас не будет проблем с вызывающим абонентом, находящимся в «нечетной» ситуации (например, структура пользовательского интерфейса, о которой вы не знаете, или что-то еще с циклом событий ), и вы принимаете за них неправильное решение.

Если методу когда-либо понадобится обеспечить обратную связь в правильном потоке, я бы передал ISynchronizeInvoke (реализовано Control ) чтобы сделать это без привязки к пользовательскому интерфейсу.

7
ответ дан 1 December 2019 в 19:40
поделиться

Если у вас есть доступ к форме или Control , вы можете проверить свойство InvokeRequired ; это вернет false , если вы находитесь в потоке пользовательского интерфейса, и true , если нет .. Если это произойдет в контексте, где вы не можете проверить с помощью Control , вы можете легко настроить в своей программе статическое свойство, которое вы могли бы проверить. Сохраните ссылку на Thread.CurrentThread при запуске и сравните Thread.CurrentThread с этой ссылкой, когда вам нужно знать:

static class Program
{
    private static Thread _startupThread = null;

    [STAThread]
    static void Main()
    {
        _startupThread = Thread.CurrentThread;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public static bool IsRunningOnStartupThread()
    {
        return Thread.CurrentThread == _startupThread;
    }
}

Вызов Program.IsRunningOnStartupThread вы получите bool , говорящее, есть вы или нет.

12
ответ дан 1 December 2019 в 19:40
поделиться

bool isMessageLoopThread = System.Windows.Forms.Application.MessageLoop;

9
ответ дан 1 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: