Форма C # - контролирует потерянное состояние дока во время работы с потоками - PullRequest
1 голос
/ 27 августа 2010

У меня есть форма с полосой меню, полосой состояния и основным разделенным контейнером (который сам содержит другие разделенные контейнеры, древовидные представления, управление вкладками и т. Д.). Иногда (довольно часто, фактически) приложение прекращает изменение размеров элементов управления в основной форме (обычно во время или сразу после операции фонового потока для получения данных). Сам элемент управления все еще утверждает, что его DockStyle - Fill, но размер элемента управления не изменяется с формой. Я не могу найти информацию о том, что может вызвать эту проблему, кто-нибудь сталкивался с чем-то подобным раньше?

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Ну, это было глупо.

Оказывается, у меня был мошеннический вызов SuspendLayout (), который не имел соответствующего вызова ResumeLayout ().Такое поведение не то, что я ожидал.Узнавайте что-то новое каждый день!Спасибо за внимание!

0 голосов
/ 27 августа 2010

Важно убедиться, что вы манипулируете пользовательским интерфейсом из правильного потока. Я рекомендую использовать следующее расширение metadds

public delegate void EmptyHandler();
public delegate void ParamHandler(params object[] args);

public static void SafeCall(this Control control, 
                      ParamHandler method, params object[] args)
{
    if (control.InvokeRequired)
    {
        control.Invoke(method, args);
    }
    else
    {
        method(args);
    }
}
public static void SafeCall(this Control control, EmptyHandler method)
{
    if (control.InvokeRequired)
    {
        control.Invoke(method);
    }
    else
    {
        method();
    }
}

тогда вы можете вызвать соответствующий метод из неправильного потока, как это

{  ... background thread 

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.SafeCall(SetImage, e.Result);
    }

 }

, который вызывает метод SetImage(Bitmap bitmap) с соответствующим потоком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...