2012-05-19 3 views
1

Я делаю небольшое простое приложение для Windows. Это моя основная функция:Обновление окна формы

static void Main() 
{ 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    // This will be my Form object 
    Form1 robotPath = new Form1(); 

    Application.Run(robotPath); 

    // at this point I'll try to make changes to my object 
    // for instance I'll try to change a background image 
    robotPath.changeImage(); 
} 

Однако после того, как изменение моего объекта, изменения не отражается в окне вывода (фон не изменяется). Я пробовал robotPath.refresh() и robotPath.invalidate(), но все же фон не меняется. Однако, когда я вызываю функцию changeImage с помощью события нажатия кнопки, он работает. Но я хочу, чтобы это было изменено без использования события button/mouse. (Фоновые изменения при изменении объекта Form1) Любое предложение?

ответ

3
Application.Run() 

не возвращается, пока основная форма не будет закрыта. Весь код, который запускается после Application.Run(), не запускается до тех пор, пока программа не завершит работу. Это явно не то, что вы хотите.

Вы можете решить эту проблему достаточно легко переназначения ваш main:

Form1 robotPath = new Form1(); 
robotPath.changeImage(); 
Application.Run(robotPath); 

Альтернативой было бы перенести вызов changeImage в конструктор Form1, или какого-либо события, запускающего в начале жизни формы, в например Load. Этот вариант лучше инкапсулирует поведение формы.

+0

Спасибо, Дэвид, я на самом деле решил проблему, создав поток перед Application.Run(), который вызывает changeImage(), когда это необходимо, и это позаботилось о том, что я хотел! – sj47sj