C# CS0120 对象引用对于非静态的字段、方法或属性“Random.Next(int)”是必需的

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

class test
{

    static Dictionary<int, int> users = new Dictionary<int, int>(); static void main()
    {
        Timer timerCheck = new Timer(new TimerCallback(Check), null, 0, 1000);//创建并启动定时器
        ThreadPool.QueueUserWorkItem(new WaitCallback(Login));//创建并启动用户登录线程

    }
    static void Login(object state)                 //用户登录线程函数
    {
        while (true)
        {
            lock (users)
            {
                int user = Random.Next(20);           //随机生成登录的用户编号
                if (!users.ContainsKey(user)) users.Add(user, 1); //将用户添加到用户列表中
              else users.Remove(user);              //将用户从用户列表中删除
            }
            Thread.Sleep(Random.Next(1000));         //随机生成用户登录时间
        }
    }
    static void Check(object state)                     //检测用户在线时长线程函数
    {
        lock (users)
        {
            Console.Clear();
            for (int user = 0; user < 20; user++)         //遍历所有的用户
            {
                if (users.ContainsKey(user))              //如果用户已经登录
                {
                    //输出用户在线时长,并将用户在线时长延长1秒
                    Console.WriteLine("{0}号用户在线时长为{1}秒", user, users[user]++);
                }
            }
        }
    }

}

random需要先实例化,它不是静态方法。
要这样用
Random d=new Random();
d.Next(20);