예제 #1
0
        public bool start(Font f, int _offset)
        {
            if (state == "Error" || state == "Start")
            {
                return(false);
            }
            DanmuForm temp = new DanmuForm("test", 1, Color.White, 20, 3000);

            offset          = _offset;
            state           = "Running";
            DanmuForm.Dfont = f;
            TrueHeight      = (int)g.MeasureString("A", f).Height + offset;

            return(true);
        }
예제 #2
0
        public void additem(int type, string str, int time, int v, Color c)
        {
            //MessageBox.Show("");

            if (state != "Running")
            {
                return;
            }
            //Debug.WriteLine("执行add内部" + AppDomain.GetCurrentThreadId().ToString());

            if (handle == 0)
            {
                if (type == 1)
                {
                    DanmuForm f1 = new DanmuForm(str, 1, c, 20, 3000);
                    f1.Show();

                    int p_temp = random_screen.Next(0, (int)(Tools.ScreenHeight * scrennpart / TrueHeight));
                    while (p_temp == last_screen_position)
                    {
                        p_temp = random_screen.Next(0, (int)(Tools.ScreenHeight * scrennpart / TrueHeight));
                    }
                    ;

                    last_screen_position = p_temp;
                    f1.Top  = p_temp * TrueHeight;
                    f1.Left = Tools.ScreenWidth;
                    //f1.Left -= 300;
                    f1.Show();
                    Task temp = new Task(async() =>
                    {
                        // Debug.WriteLine("执行add thread内部" + AppDomain.GetCurrentThreadId().ToString());

                        //Tools.Message(Thread.CurrentThread.ManagedThreadId);
                        while (!f1.token)
                        {
                            //Debug.WriteLine("A:" + AppDomain.GetCurrentThreadId().ToString() + "   " + f1.Left.ToString() + " " + f1.Top.ToString());



                            f1.Left = f1.Left - 5;

                            await Task.Delay(v);
                        }
                        f1.Close();
                    });
                    //process.Add(temp);     -----之后完善
                    try { processdic.Add(temp, f1); temp.Start(); } catch { }


                    //f1.startprocess();
                }
                else if (type == 2)
                {
                    //间隔过大问题---已解决(利用静态偏移变量解决)
                    DanmuForm f1 = new DanmuForm(str, 2, c, 20, 3000);
                    f1.Show();
                    f1.Left = (Tools.ScreenWidth - f1.Width) / 2;
                    Task temp = new Task(async() => {
                        int i = 0;
                        for (; i < Screentoken.Length; i++)
                        {
                            if (!Screentoken[i])
                            {
                                Screentoken[i] = true; break;
                            }
                            else if (i == Screentoken.Length - 1)
                            {
                                i = 0;
                            }
                        }

                        //Tools.Message(i);
                        f1.Top = i * TrueHeight;

                        await Task.Delay(time);
                        f1.Close();
                        Screentoken[i] = false;
                    }

                                         );
                    temp.Start();
                }
                else if (type == 3)
                {
                    //暂缺
                }
            }
        }