, 즉 사용자 상호 작용 (윈폼을 포함하여, 인증의 전 과정을 포함하는 하나의 방법하나의 방법으로 사용자 상호 작용을 캡슐화하는 방법은 외부 프레임 워크를 사용하고
bool Authenticate();
와 인터페이스를 정의). 내가 뭘하고 싶은 이제
bool Authenticate()
{
bool succeeded = false;
bool userCancelled = false;
while(!succeeded && !userCancelled)
{
var credentials = AskTheUserForCredentials(); // this needs to wait for user input before returning!
if (credentials == null)
userCancelled = true;
else
succeeded = AuthenticateWithAnExternalServer(credentials);
if (!succeeded)
ShowErrorMessage();
}
return succeeded;
}
쉬운 방법 같은 것을 AskTheUserForCredentials()
및 ShowErrorMessage()
()가 내부 Form.ShowDialog를 사용하는 것입니다 구현하는 것입니다. 실제 인증 프로세스에서 대화 상자가 사라지고 새로운 클릭 투 클릭 대화 상자에 오류 메시지가 나타나기 때문에 이는 매우 나쁜 사용자 환경입니다.
나는 하나의 형식으로 모든 내용을 표시하고, 보이는 상태로 유지하며, 텍스트 상자/단추를 적절히 비활성화하고 오류 메시지 만 표시합니다. 이 단일 메서드 호출을 차단하면 어떻게 될까요?
UPDATE
가장 좋은 방법은 지금까지 AskTheUserForCredentials()
내부 메시지 펌프를 구현하는 것입니다 :
Credentials AskTheUserForCredentials()
{
while(NeitherOkNorCancelPressed())
{
Application.DoEvents();
Thread.Sleep(10); // Standard Sleep(0) results in 100% procesor core usage.
}
return CreateCredentialsFromTextboxesEtc();
}
지금 우리 모두가 메시지 펌프가 깨끗한 거리가 멀다 알고있다. 정확히이 솔루션은 얼마나 나쁜 것입니까? 더 나은 점이 있나요?
UPDATE 메시지 펌프는 몇 가지 함정이 있었다 2
:
화이트 UIAutomation
작업 인
끝 모든 프로세스를 ChrisBD와 같은 대화 상자에 위임했습니다 (대화 상자는 궁극적 인 성공 또는 실패 후에 만 닫힙니다). IoC를 사용하여 GUI에서 인증을 추상화하는 데 더 많은 시간이 걸렸지 만 결국은 깨끗하고 의도 한대로 작동합니다.
do'AskTheUserForCredentials()'와'ShowErrorMessage()'는 별개의 양식이어야하며, 기본 폼 내에서 패널로 만들어 주시겠습니까? – StaWho
나는 그들이 같은 형식을 사용하기를 바랍니다. –
'Authenticate' 메쏘드로 폼을 생성하고 그것을'AskTheUser ...'와'ShowErrorMessage' 메쏘드의 매개 변수로 전달할 수 없었습니까? –