여기에 전문 용어가 확실하지는 않지만 여기서는 기본적으로 응용 프로그램의 main() 스레드가 시작되어 두 개의 스레드를 호출합니다. 하나는 특정 레지스트리 키를 기다리는 이벤트 처리기를 설정합니다. 다른 하나는 5 분마다 xml 파일에 대한 변경 사항을 기록하기 위해 타이머를 시작하고 계속 실행됩니다. 내가 가진 문제는 일단 호출 된 두 메소드가 초기화되면 프로그램은 main으로 돌아가서 프로그램을 종료한다는 것입니다. 내 관련 코드 섹션 아래에서 찾을 수 있습니다, 그래서 어떤 도움을 주시면 감사하겠습니다 :메인() 스레드를 잠급니다.
static void Main(string[] args)
{
runner one = new runner();
runner two = new runner();
Thread thread1 = new Thread(new ThreadStart(one.TimerMeth));
Thread thread2 = new Thread(new ThreadStart(two.start));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
public void TimerMeth()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Interval = 300000;
timer.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
file write = new file();
write.write(RegKeys);
}
public void start()
{
if (File.Exists("C:\\test.xml"))
{
file load = new file();
RegKeys = load.read(RegKeys);
}
string hiveid = "HKEY_USERS";
WindowsIdentity identity = WindowsIdentity.GetCurrent();
string id = identity.User.ToString();
string key1 = id + "\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows Messaging Subsystem\\\\Profiles\\\\Outlook\\\\0a0d020000000000c000000000000046";
List<string> value1 = new List<String> { "01020402", "test" };
valuechange = new RegistryValueChange(hiveid, key1, value1);
valuechange.RegistryValueChanged += new EventHandler<RegistryValueChangedEventArgs>(valuechange_RegistryValueChanged);
try
{
valuechange.Start();
}
catch
{
StreamWriter ut;
ut = File.AppendText("C:\\test.txt");
ut.WriteLine("error occured in starting management");
ut.Close();
}
file test = new file();
test.checkfile("C:\\test.xml");
}
void valuechange_RegistryValueChanged(object sender, RegistryValueChangedEventArgs e)
{
// deals with the returned values
}
기본적으로 모든 코드는 내가 윈도우 폼 응용 프로그램에서 테스트를 봤는데 잘 작동하지만 지금은 독립에 실행해야 응용 프로그램을 백그라운드에서 인터페이스없이 사용하고 XML 파일 및 변경 이벤트를 계속 작성하려면 계속 살아 있어야합니다.
'main' 루틴 내에서'Console.ReadLine();'과 같은 것을 추가하려고 했습니까 (간섭하지 않고 종료하지 않으려 고합니다)? 나는 그것을 시도하지 않았지만 그것이 효과가 있는지보기 위해 단지 몇 분이 걸릴 것입니다. –