Kolopsel Posted August 17, 2017 Share Posted August 17, 2017 Hello, ive got a problem with my Timer. It is somehow not beeing executed by the Script. Can you please tell me what i am doing wrong ? This is my Code : using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using GTA;using GTA.Native;using System.Windows.Forms;using System.Timers;namespace Example{ public class Example : Script { public Example() { Tick += onTick; KeyDown += onKeyDown; } private void onTick(object sender, EventArgs e) { } private void onKeyDown(object sender, KeyEventArgs e) { } public class Timer { private static System.Timers.Timer aTimer; public static void Main() { // Create a timer and set a two second interval. aTimer = new System.Timers.Timer(); aTimer.Interval = 2000; // Hook up the Elapsed event for the timer. aTimer.Elapsed += OnTimedEvent; // Have the timer fire repeated events (true is the default) aTimer.AutoReset = true; // Start the timer aTimer.Enabled = true; } private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) { UI.Notify("IT WORKS !"); } } } Thank you for reading ! Link to comment Share on other sites More sharing options...
Guest Posted August 17, 2017 Share Posted August 17, 2017 You've create a class called Timer, in that you have a System.Timer but you never create an instance of your Timer class to initiate the System.Timer. You also have the event handler inside the Timer class (that never gets instantiated). I would advise re-reading on how System Timers work, because you have a lot of crossed concepts here that are tripping over each other. Link to comment Share on other sites More sharing options...
Kolopsel Posted August 18, 2017 Author Share Posted August 18, 2017 (edited) Ok, now the Timer "kinda" works, but after the Timer perfomed the Task it crashes. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using GTA;using GTA.Native;using System.Windows.Forms;using System.Timers;namespace Example{ public class Example : Script { public Example() { Tick += onTick; KeyDown += onKeyDown; } private void onTick(object sender, EventArgs e) { } private void onKeyDown(object sender, KeyEventArgs e) { System.Timers.Timer timer = new System.Timers.Timer(5000); // create new instance of a timer timer.Start(); // start the timer timer.Elapsed += (Object source, System.Timers.ElapsedEventArgs d) => { UI.Notify("It Works"); }; } }} Thank you for reading ! Edited August 18, 2017 by Kolopsel Link to comment Share on other sites More sharing options...
Guest Posted August 18, 2017 Share Posted August 18, 2017 I don't mean this to sound rude, but how much C# programming have you done before? It seems like you are jumping into scripting without the fundamental basics in C# practices and that is going to make things twice as difficult as modding inside a game already is. You are doing things in the onKeyDown() that shouldn't really be done in there and that might be what is causing the problems. Spend some time getting to grips with C# basics, like how and where to declare variables/fields/properties. Learn to understand scope and how to assign event handlers. But do all that in simple WinForms applications, where you can debug code outside a game environment and see what is actually happening. Once you have the basics under control, then move on to scripting mods. Of course, you are free to ignore all this and stick with jumping in at the deep end but as someone who has spent 30 years as a game developer, I wouldn't advise it to be honest. You might never create a usable winforms application but it's a much more controlled environment to learn in. If your winform crashes, it simply complains and lets you try again. When your script crashes the game, you could end up having to reload the game, which can add to the frustration. I have a small test application that has a few buttons, a couple of labels and some text boxes and all I do, is change what those buttons do when I want to test something. Sometimes I need to see how data is getting moved about and that's easy to do in an application. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now