多线程暂停和恢复

时间:2016-04-01 14:05:14

标签: c# .net multithreading

我想学习关于线程暂停和恢复的工作逻辑。

Thread th=new Thread(start);
th.Start();

public void start()
{
    command_1;
    command_2;
    command_3;

    if(variable_condition)
        goto Pause;

    command_4;
    command_5;
    command_6;
    command_7;

    Pause:
        pause();
}

private void pause()
{
    th.Suspend();
}

private void button1_Click(object sender, EventArgs e)
{
    th.Resume();
}

现在,当启动线程的命令继续?

command_1或command_4?

1 个答案:

答案 0 :(得分:1)

根据编写的代码,Resume将不起作用,因为启动函数执行已经在标签Pause。所以,你最后会恢复,而这个功能只是在恢复时结束。

如果您想从command_4恢复,请更改

if(variable_condition)
    goto Pause;

if(variable_condition)
    pause();

并删除标签Pause

或者,如果编码之神要求使用GOTO:

Thread th=new Thread(start);
th.Start();

public void start()
{
    command_1;
    command_2;
    command_3;

    if(variable_condition)
        goto Pause;

    Pause:
        pause();

    command_4;
    command_5;
    command_6;
    command_7;
}

private void pause()
{
    th.Suspend();
}

private void button1_Click(object sender, EventArgs e)
{
    th.Resume();
}

这是非常愚蠢的,但是......