Planet-KIM / Auto_Calibrator

이곳은 모델링한 단품 모델에서 Test 값을 찾아주는 CF 값을 자동적으로 찾아주는 것을 구현할 것입니다.
4 stars 0 forks source link

Overall_Click에 대한 연구 사항 및 정리 #7

Open Planet-KIM opened 3 years ago

Planet-KIM commented 3 years ago

@minkyoyeah 참고하면서 작성해주세요.

1. Overall_Click을 생성자로 빼서 다른 class에 사용할 수 있는지에 대한 여부를 파악해서 알려주세요.

3. 추가 Study

minkyoyeah commented 3 years ago

3. 추가 Study - Overall 함수가 어디에 참조되어 있는지 Ribbon.cs 파일 속 ButtonOverall_Click 입니다.

3.추가 Study - Overall 내의 변수, 함수들이 무엇을 의미하는지 { if (!_editModeManager.ExcelOperationIsSafe("Overall Simulation")) return; //엑셀 입력커서가 작동 중일때 뜨는 알림창 GetSheetObjects(); // 어떤 시트인지 판별하는 함수입니다. ex FMUSheet, InputSheet, OutputSheet options.StopRequest = false; // 내재된 라이브러리에서 제공하는 Option 클래스의 options 변수입니다. thisApplication.ScreenUpdating = false; //엑셀 스크린업데이트 false 설정, 수행속도 감소 thisApplication.DisplayAlerts = false; // 엑셀 경고창 fasle 설정

            Thread overall = new Thread(() =>
            {
                try
                {
                    Remote remote = new Remote(thisApplication, SheetObjects, options); //SheetObejcts는 엑셀에 Sheet 정보를
                    remote.PropertyChanged += remote_PropertyChanged;                        // 저장합니다.
                    SetStatus(ScoreStatus.Active); //라이선스 활성화 관련된 함수입니다.
                    remote.Overall();
                }
                catch (ArgumentException ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unknown error at method buttonOverall_Click:\n\n" + ex.Message, "Error",
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
                finally
                {
                    SetStatus(ScoreStatus.Ready);
                }
            });
            overall.SetApartmentState(ApartmentState.STA); // 스레드를 아파트 모드로 설정
            overall.Start();

}

minkyoyeah commented 3 years ago

2. Overall을 반복문 등으로 여러번 수행 테스트를 해보시기를 권합니다. - Overall 메소드를 수행하면 무조건 Outputsheet에 결과가 출력되나요? -> 네. 시뮬레이션을 돌리게 되면 뜨는 Simulation 폼에서 결과가 끝난 후, "Close the window" 같은 버튼을 누르게 되면 자동적으로 OutputSheet에 결과가 출력됩니다.

-------"Close Window"를 누르면 그냥 창만 꺼집니다. 결과 출력과 관련 없음-------

minkyoyeah commented 3 years ago

1. Overall_Click을 생성자로 빼서 다른 class에 사용할 수 있는지에 대한 여부를 파악해서 알려주세요

Overall_Click을 쓰기 위해 Ribbon 클래스의 객체를 만들어 Ribbon 클래스의 Overall_click에 접근하는건 제약이 많습니다. 그래서 다른 클래스에서 똑같이 Overall_click 함수를 만들어 그 클래스의 객체에서 실행될 수 있게 했습니다.

자료는 정리해서 올리겠습니다.

Planet-KIM commented 3 years ago

@minkyoyeah Overall 메소드에 설명해주셔서 감사합니다.

- overall.Start()가 종료가 될때까지 기다리기 위해서는....

    overall.Start();
    overall.Join();
    MessageBox.Show("스레드 종료후 메시지 실행!");

- 위에 처럼 코드를 작성하면 될까요?

minkyoyeah commented 3 years ago

네 Join(); 함수가 쓰레드가 종료될 때 까지 기다리는 작업인 것으로 압니다. interrupt()나 abort()도 많이 쓴다고 하는데 Join이 제일 나은 것 같아서 join()으로 썼습니다.

Planet-KIM commented 3 years ago

@minkyoyeah 참고부탁합니다.

Planet-KIM commented 3 years ago

@minkyoyeah 참고하시기를 부탁합니다.

시행 결과

- 다른 메소드에서도 buttonOverall_Click method가 참조가 가능한 것을 확인했습니다.

- 참조 후 반복문으로 buttonOverall_Click method를 여러번 시행되는 것을 확인했습니다.

체크리스트

- 1. 참조하여 반복문을 만드는 것에는 성공하였으나 위에서 생성되는 프로세스(form)이 무엇인지 파악하지 못했습니다.

- 2. 현재 Form class를 이용하여서 종료(Close())를 하려고 하였으나 반환 값이 'null'이 나와서 에러가 발생하는 문제가 있습니다.