Quantcast

Jump to content

» «
Photo

[C#] Timer Problem

3 replies to this topic
Kolopsel
  • Kolopsel

    Player Hater

  • Members
  • Joined: 18 Jun 2017
  • Germany

#1

Posted 17 August 2017 - 04:12 PM

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 !


LeeC2202
  • LeeC2202

    Snitch

  • Members
  • Joined: 24 Oct 2015
  • United-Kingdom

#2

Posted 17 August 2017 - 09:25 PM

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.


Kolopsel
  • Kolopsel

    Player Hater

  • Members
  • Joined: 18 Jun 2017
  • Germany

#3

Posted 18 August 2017 - 08:48 AM Edited by Kolopsel, 18 August 2017 - 08:49 AM.

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 !


LeeC2202
  • LeeC2202

    Snitch

  • Members
  • Joined: 24 Oct 2015
  • United-Kingdom

#4

Posted 18 August 2017 - 03:16 PM

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.

  • jedijosh920 likes this




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users