2012-08-15 2 views
0

백그라운드 스레드에서 메서드를 실행하기위한 몇 가지 일반적인 함수가 있습니다. 정상적인 스레드 동기화 문제 외에 여기에 위험이 있습니까?다른 스레드에서 함수를 실행하기위한 C# generic

public static void ThreadRunReturn<TReturn, TArgument>(Func<TArgument, TReturn> func, TArgument arg, bool background = true) 
    { 
     Thread th = new Thread(unused => func(arg)); 
     th.IsBackground = background; 
     th.Start(th); 
    } 
    public static void ThreadRunReturn<TReturn, TArgument1, TArgument2>(Func<TArgument1, TArgument2, TReturn> func, TArgument1 arg1, TArgument2 arg2, bool background = true) 
    { 
     Thread th = new Thread(unused => func(arg1, arg2)); 
     th.IsBackground = background; 
     th.Start(th); 
    } 

    public static void ThreadRun<TArgument>(Action<TArgument> action, TArgument arg, bool background = true) 
    { 
     Thread th = new Thread(unused => action(arg)); 
     th.IsBackground = background; 
     th.Start(th); 
    } 
    public static void ThreadRun<TArgument1, TArgument2>(Action<TArgument1, TArgument2> action, TArgument1 arg1, TArgument2 arg2, bool background = true) 
    { 
     Thread th = new Thread(unused => action(arg1, arg2)); 
     th.IsBackground = background; 
     th.Start(th); 
    } 
+2

모든 것이 공개되어야합니까? – KingCronus

+4

TPL을 더 쉽게 사용하지 않습니까? 'Task.Factory.StartNew' –

+0

@ L.B Task를 살펴 보겠습니다 .Factory.StartNew,하지만 빠른 눈으로는 간단하지가 않습니다. 나는 다음을 할 수 있기를 원한다. MyClass.ThreadRunReturn (RunSShCommand, "reboot"); – Marinara54uc3

답변

1

배경 스레드가 응용 프로그램을 유지하지 못합니다. 오래 실행중인 백그라운드 프로세스가 실행 중이고 응용 프로그램이 종료되면 백그라운드 스레드가 완료 될 때까지 기다리지 않고 종료합니다. 명심해야 할 것이 있습니다.

+0

감사합니다. msdn에서 주목할만한 점은 주목할 가치가있는 점입니다. – Marinara54uc3

관련 문제