C#中,如何实现“单步执行”的按纽?

即程序运行到指定位置后停住,再点击按纽继续执行,如此反复,直到程序结束。在C#WindowsForms应用程序中,如何实现“单步执行”的按钮?(自己设计这个按纽)eg:p... 即程序运行到指定位置后停住,再点击按纽继续执行,如此反复,直到程序结束。
在C# Windows Forms应用程序中,如何实现“单步执行”的按钮?
(自己设计这个按纽)
eg:
private void button6_Click(object sender, EventArgs e)
{
while (...)
{
....
for(int i=0;i<5;i++)
{
....
//程序运行到此处后停住,再点击按纽继续执行
}

}
}
展开
 我来答
Aupryyyyyyyyyy
2012-10-22 · TA获得超过1636个赞
知道大有可为答主
回答量:1574
采纳率:53%
帮助的人:939万
展开全部
这种方式的话只能通过多线程来解决。
原因是如果你直接把当前程序直接停住,其实你是把当前程序的 UI 线程(主线程)给暂停了。也就是说程序根本就不会响应用户操作,按钮单击也就自然不会响应了。
那么,为了能够使得新的线程被暂停后,只有在主线程按下按钮线程才会继续。我们得用 ManualResetEvent 类来解决这个方法。具体的还是看代码吧:

using System.Threading;

ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
while(...)
{
...
for(int i = 0; i < 5; i++)
{
mre.WaitOne(); // 阻止新线程,直到 mre 对象被按钮单击事件处理方法调用其 Set() 方法
}
}
});

private void button对象_Click(object sender, EventArgs e)
{
mre.Set(); // 调用 ManualResetEvent 对象的 Set 方法以让新线程继续执行
}

ManualResetEvent 的作用就是允许线程直接互相发送信号,指示对方线程是否应该被暂停(阻止)一段时间,直到当前线程执行好自己的任务并允许另一线程继续执行。
比方说,我新建了一个线程,负责输出 2 这个数字。然而我希望这个线程能够在主线程开始输出 1 这个数字前就开始执行,但是 2 这个数字却出现在 1 之后。代码如下:

ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
mre.WaitOne(); // 调用了 mre 的 WaitOne 方法使当前线程(根据上下文判断是新线程)阻止,直到其它线程对 mre 对象调用了其 Set 方法
Console.WriteLine("来自新线程的:2");
});
newThread.Start();
Console.WriteLine("来自主线程的:1");
newThread.Set();

输出结果如下:
来自主线程的:1
来自新线程的:2
钢蛋Gondar
2012-10-21 · TA获得超过286个赞
知道小有建树答主
回答量:360
采纳率:100%
帮助的人:313万
展开全部
LZ,这是线程Thread的相关知识,建议LZ看下.NET里线程,多线程的知识。包括Theard的创建,执行,暂停,睡眠,委托等方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qqbuby163
2012-10-21 · TA获得超过224个赞
知道小有建树答主
回答量:249
采纳率:100%
帮助的人:104万
展开全部
光标定位到这一行的代码,然后F9加断点就行了。你会发现当前行左边多了个红色点点,然后你就可以调试了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
此题无解235
2012-10-21 · 超过12用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:31.7万
展开全部
不是太明白你的问题 直接F10啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式