#c# #console-application
#c# #таймер #рисовать
Вопрос:
У меня проблемы с таймером. У меня есть функция в функции (рисовать в функции)
void func(){ /*...do something ... */ for(){ for() { /*loop*/ draw(A,B, Pen); } /*... do something ...*/ } }
Это функция рисования
public void draw1(Point Poc, Point Kra, Pen o) { Graphics g = this.CreateGraphics(); g.DrawLine(o,Poc.X 4, Poc.Y 4,Kra.X 4, Kra.Y 4); g.Dispose(); }
Я вызываю функцию «функция» при нажатии кнопки
private void button4_Click(object sender, EventArgs e){ func(); }
Я хочу вызывать функцию рисования каждую секунду (рисовать линию каждую секунду). Между чертежами функции необходимо продолжить работу и вычислить = цикл, а затем нарисовать следующую строку в течение некоторого времени(интервала). Я пытался с
timer1.Tick = new EventHandler(timer1_Tick);
и т.д..
private void timer1_Tick(object sender, EventArgs e) { ... draw(A, B, Pen) }
и т.д..
но все это останавливает мою функцию и рисует одну случайную линию. Мне просто нужно время(интервал) между двумя рисунками в функции «функция». Без таймера работает нормально, но рисуйте все линии сразу, мне нужно медленное рисование. Ваше здоровье.
Комментарии:
1. ваш метод тика таймера должен иметь
draw(A,B, Pen);
вместоdraw1()
2. Таймер включен? Также добавьте параметры в функцию Draw1()
3. Параметры в порядке. Таймер включен.
Ответ №1:
Я не совсем понимаю, что вы пытаетесь сделать, но, в общем, вы можете использовать объект класса Timer для указания кода, который будет выполняться с заданным интервалом. Код будет выглядеть примерно так:
Timer myTimer = new Timer(); myTimer.Elapsed = new ElapsedEventHandler(DisplayTimeEvent); myTimer.Interval = 1000; // 1000 ms is one second myTimer.Start(); public static void DisplayTimeEvent(object source, ElapsedEventArgs e) { // code here will run every second }
Ответ №2:
попробуйте это
var aTimer = new System.Timers.Timer(1000); aTimer.Elapsed = new ElapsedEventHandler(OnTimedEvent); aTimer.Interval = 1000; aTimer.Enabled = true; //if your code is not registers timer globally then uncomment following code //GC.KeepAlive(aTimer); private void OnTimedEvent(object source, ElapsedEventArgs e) { draw(A, B, Pen); }
Ответ №3:
Вы не рисуете в приложении WinForms, вы отвечаете на сообщения об обновлении или рисовании. Сделайте то, что вы хотите сделать в Paint
событии формы (или переопределите OnPaint
метод). Если вы хотите, чтобы форма была нарисована заново, используйте Form.Invalidate
. например, вызовите Form.Invalidate
отметку таймера…
Ответ №4:
РЕШЕНО на данный момент с
System.Threading.Thread.Sleep(700);