Pergunta

Eu preciso ter um sinal fio de outra, se o usuário deseja execução de interrupção, no entanto estou inseguro sobre como implementar o / mecanismo de verificação de sinal de sinalização. Eu não gostaria de ter um singleton no meu projeto (como um bool global), mas existe uma alternativa?

Na esta discussão pessoas sugerem estruturas adequadas para que, em C ++, mas eu não sei de nada semelhante em .NET. Alguém poderia lançar alguma luz?

Foi útil?

Solução

Experimente BackgroundWorker . Ele suporta atualizações de progresso e de cancelamento de uma tarefa em execução.

Se você quiser um segmento para esperar até que outro segmento tenha terminado fazendo a sua coisa, então Monitor.Wait e Monitor.Pulse são bons, como é ManualResetEvent. No entanto, estes não são realmente de alguma utilidade para cancelar uma tarefa em execução.

Se você quiser escrever seu próprio código de cancelamento, você poderia apenas ter um lugar campo que ambas as linhas têm acesso. Marcá-lo volátil, por exemplo:.

private volatile bool cancelling;

Tenha o segmento principal defini-lo como verdadeiro, e têm o segmento de trabalho verificá-lo periodicamente e defini-lo como falso quando ele tiver terminado.

Isto não é realmente comparável a ter uma 'variável global', como você ainda pode limitar o âmbito da variável de semáforo para ser privada para uma classe.

Outras dicas

Um pouco vago (curto de tempo), mas olhar para ManualResetEvent e AutoResetEvent . Você também pode querer olhar para cima monitor e bloqueio de palavras-chave.

Olhe em Monitor.Wait e Monitor.Pulse. Aqui está um excelente artigo sobre threading em .Net (muito legível): http: //www.albahari .com / rosqueamento / part4.aspx

Uma solução simples, como um static boolean sincronizado, deve ser tudo que você precisa em oposição a uma solução baseada em quadro que copuld ser um exagero para seu cenário. No caso de você ainda quer um quadro, ter um olhar para o paralelo extensões para .NET de ideias.

Depende de que tipo de sincronização que você precisa. Se você quer ser capaz de executar o fio em um loop até algum tipo de final de execução é alcançado - tudo que você precisa é uma variável bool estático. Se você quiser um segmento para esperar até outro segmento chegar a um ponto em execução que você pode querer usar WaitEvents (AutoResetEvent ou ManualResetEvent). Iflyyou precisa esperar por vários waitHandles você pode usar WaitHandle.WaitAll ou WaitHandle.WaitAny.

Olhe para o namespace System.Runtime.Remoting.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top