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++)
{
....
//程序运行到此处后停住,再点击按纽继续执行
}
}
} 展开
在C# Windows Forms应用程序中,如何实现“单步执行”的按钮?
(自己设计这个按纽)
eg:
private void button6_Click(object sender, EventArgs e)
{
while (...)
{
....
for(int i=0;i<5;i++)
{
....
//程序运行到此处后停住,再点击按纽继续执行
}
}
} 展开
4个回答
展开全部
这种方式的话只能通过多线程来解决。
原因是如果你直接把当前程序直接停住,其实你是把当前程序的 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
原因是如果你直接把当前程序直接停住,其实你是把当前程序的 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
展开全部
LZ,这是线程Thread的相关知识,建议LZ看下.NET里线程,多线程的知识。包括Theard的创建,执行,暂停,睡眠,委托等方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
光标定位到这一行的代码,然后F9加断点就行了。你会发现当前行左边多了个红色点点,然后你就可以调试了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是太明白你的问题 直接F10啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询