示例#1
0
        /// <summary>
        /// 控制器的主循环
        /// </summary>
        /// <param name="sender">Threading.Dispatcher</param>
        /// <param name="e">RenderingEventArgs</param>
        public void DebugControlerCallback(Object sender, EventArgs e)
        {
            currTime = (e as RenderingEventArgs).RenderingTime.TotalMilliseconds;

            switch (state)
            {
                case DebugControlerState.DCS_RUN:
                    {
                        if (currTime - lastTime < timeInterval)
                            break;
                        lastTime = currTime;
                        ExecuteOneLine();
                    }
                    break;

                case DebugControlerState.DCS_STEP:
                    {
                        ExecuteOneLine();
                        state = DebugControlerState.DCS_STOP;
                    }
                    break;

                case DebugControlerState.DCS_STOP:
                    //System.Windows.MessageBox.Show((e as RenderingEventArgs).RenderingTime.TotalMilliseconds.ToString());
                    // 啥也不做
                    break;

                case DebugControlerState.DCS_PAUSE:
                    // 啥也不做
                    break;
            }
        }
示例#2
0
        /// <summary>
        /// 停止
        /// </summary>
        public void Stop()
        {
            state = DebugControlerState.DCS_STOP;
            // 释放资源
            currLineNumber = 0;
            mainWindow.memoryWindow.MemoryDataGrid.ItemsSource = null;
            breakPointList = null;

            System.Windows.MessageBox.Show("解释器停止");
            // 停止渲染
            mainWindow.animationPluginManager.StopRender();
            //System.Windows.MessageBox.Show( mainWindow.etController.GetOutput() );
        }
示例#3
0
 /// <summary>
 /// 单步
 /// </summary>
 public void Step()
 {
     // 初始化
     lastTime = currTime;
     state = DebugControlerState.DCS_STEP;
 }
示例#4
0
 /// <summary>
 /// 运行
 /// </summary>
 public void Run()
 {
     // 初始化
     lastTime = currTime;
     state = DebugControlerState.DCS_RUN;
 }
示例#5
0
 /// <summary>
 /// 继续
 /// </summary>
 public void Resume()
 {
     state = DebugControlerState.DCS_RUN;
 }
示例#6
0
 /// <summary>
 /// 暂停
 /// </summary>
 public void Pause()
 {
     state = DebugControlerState.DCS_PAUSE;
 }
示例#7
0
        /// <summary>
        /// 解释执行一行源代码
        /// </summary>
        public void ExecuteOneLine()
        {
            // 调用Dll的单步
            int isRunning = mainWindow.etController.Step();
            // 更新内存窗口
            if (mainWindow.memoryWindow.IsVisible == true)
            {
                mainWindow.memoryWindow.MemoryDataGrid.ItemsSource = mainWindow.etController.GetMemoryItems();
            }
            // 高亮编辑器的相应行
            if (mainWindow.DemoViewButton.IsChecked != true)
            {
                currLineNumber = mainWindow.etController.GetCurrentLine();
                // 定义高亮行的颜色
                Color c = new Color();
                c.R = 255;
                c.G = 214;
                c.B = 84;
                c.A = 255;
                mainWindow.editorAdapter.ShowLine(true, currLineNumber, c);
            }
            // 更新断点列表并提供断点服务
            breakPointList = mainWindow.editorAdapter.getBreakPointList();
            foreach (int bp in breakPointList)
            {
                if (bp == currLineNumber)
                {
                    state = DebugControlerState.DCS_STOP;
                    mainWindow.StepButton.IsEnabled = true;
                    mainWindow.RunButton.IsChecked = false;
                    mainWindow.TipBoxText.Text = "到达断点!";
                    (mainWindow.FindResource("ShowTipBox") as Storyboard).Begin();
                    break;
                }
            }
            // 更新输出窗口信息
            if (mainWindow.outputWindow.IsVisible)
            {
                Run myRun = new Run(mainWindow.etController.GetOutput());
                Paragraph myParagraph = new Paragraph();
                myParagraph.Inlines.Add(myRun);
                mainWindow.outputWindow.OutputBox.Document.Blocks.Clear();
                mainWindow.outputWindow.OutputBox.Document.Blocks.Add(myParagraph);
            }

            if (isRunning == 0)
                Stop();
        }