Как перерисовать или обновить экран

Я работаю над приложением wpf. Здесь мне нужно использовать System.Windows.Forms.FolderBrowserDialog в моем приложении Wpf.

        System.Windows.Forms.FolderBrowserDialog openFolderBrowser = new System.Windows.Forms.FolderBrowserDialog();

        openFolderBrowser.Description = "Select Resource Path:";
        openFolderBrowser.RootFolder = Environment.SpecialFolder.MyComputer;
        if (openFolderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            //some logic
            openFolderBrowser.Dispose();
        }

Я запускаю FolderBrowserDialog, выбираю папку и нажимаю OK, а затем запускаю другой System.Windows.Forms.FolderBrowserDialog. Моя проблема заключается в том, что когда я выбираю папку и нажимаю OK в этом FolderBrowserDialog, тень FolderBrowserDialog остается на экране (означает мой экран не обновляется). Мне нужно свернуть или изменить его размер, чтобы удалить тень FolderBrowserDialog. Как я могу решить эту проблему? Любая помощь плз?

Редактировать:

Я нашел решение. Я вызвал метод OnRender в своем окне wpf, и он у меня сработал. Он перерисовывает все на экране.


person viky    schedule 08.04.2010    source источник


Ответы (2)


Вы можете вызвать метод InvalidateVisual для обновления пользовательского интерфейса.

person Anonymous    schedule 08.04.2010
comment
Спасибо, это дало мне способ решить мою проблему. Я обновил вопрос, указав, как я решил свою проблему. - person viky; 08.04.2010
comment
OnRender будет потреблять огромное количество ресурсов процессора на моей машине, я использую этот метод после возврата ShowDialog. - person Anonymous; 08.04.2010

по коду формы

 Update();

обновляет экран и обновляет пользовательский интерфейс.

Мы используем winforms, поэтому Update() — это базовая функция, которая перерисовывает содержимое окна. так что вы можете использовать его непосредственно из формы. Основное использование может быть таймером, который обновляет метку на экране. когда таймер тикает, вы обновляете метку:

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 1000; // specify interval time as you want 
t.Tick += new EventHandler(timer_Tick);
t.Start();

void timer_Tick(object sender, EventArgs e)
{
  label1.text = DateTime.Now.ToString("h:mm:ss")); 
  Update(); //this will refresh the form and label's text is updated.
}

в противном случае label1.text никогда не изменится.

person Alp Altunel    schedule 29.07.2017
comment
Я думаю, что для кого-то еще нужно немного больше информации, чтобы найти этот ответ полезным - person ono2012; 29.07.2017
comment
Update() не является стандартным методом .NET. Вы должны указать на правильную реализацию. - person Marcel Grüger; 30.10.2017
comment
надеюсь, что это редактирование прояснит ono2012 и Марселя Грюгера - person Alp Altunel; 01.11.2017