2016-09-01 2 views
1

return이 아닌 함수를 호출하여 코드 실행을 중지 할 수있는 곳이라면 C# Winforms에서 알아 내려고합니다.라이브러리 내에서 C# 코드 실행 중지

public class Response 
{ 
    public function error($index) 
    { 
    $response = array(); 

    switch ($index) 
    { 
     case 0: $response = array('msg' => 'fields missing..'); break; 
    } 

    // The trick is here 
    exit(json_encode($response)); 
    } 
} 

그래서, C# 프로젝트와 내 양식에서 나는 response 도서관이 전화 :

다음 코드는 PHP

if($something == null) 
    $this->response->error(0); 

// This code is never executed if the condition is true 
echo 'Hello'; 

그리고 도서관 response 가능하다, 같은 뭔가가 방법 :

private void button1_Click(object sender, EventArgs e) 
{ 
    libraries.Response Response = new libraries.Response(); 

    if(textBox1.Text == "") 
     Response.error(0); 

    // The code continues to get executed even if the condition is true 
    button2.PerformClick(); 
} 

응답 트라이 ggers MessageBox에는 코드 실행을 멈추게하는 요소가 전혀 없습니다.

class Response 
{ 
    public void error(int index) 
    { 
     string msg = ""; 

     switch (index) 
     { 
      case 0: msg = "Fields missing.."; break; 
     } 

     MessageBox.Show(msg, "My app", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

지금, 나는 아래의 코드는 코드 실행을 중지 같이 나는 return를 사용할 수 있다는 것을 알고,하지만 난 트릭을 할 것 도서관 response에 넣을 수 있습니다 거기에 뭔가 다른 궁금 해서요?

if(textBox1.Text == "") 
{ 
    Response.error(0); 
} 
else 
{ 
    button2.PerformClick(); 
} 

하지만 goto 문을 사용하여 오류를 던지고되지 않고 많이 사용하지 않으려면 return이 옵션을 IS-경우를 elses 다음 :

if(textBox1.Text == "") 
{ 
    Response.error(0); 
    return; 
} 
+0

이인가 라이브러리 코드는 백그라운드 작업자 또는 작업에서 비동기 적으로 실행됩니까? 그것의 배경 노동자에서 당신이 이벤트에 근로자를 구독하고 그것을 죽일 수있는 후크. 동일한 스레드에서 실행중인 경우 코드 스레드는 라이브러리가 반환 될 때까지 잠 깁니다. –

+0

.NET에서 예외 상태의 코드 실행을 중지하려면 예외를 throw 할 수 있습니다. 이렇게하면 throw 문 다음에 오는 코드 행은 실행되지 않고 첫 번째 try/catch 블록과 catch 블록 코드가 실행될 때까지 예외가 버블 링됩니다. –

답변

0

또한 당신은 else 절을 사용할 수 있습니다 .

편집

(완전히 응용 프로그램을 종료 제외) 호출 방법은 내가 생각할 수있는 호출 방법에서 실행 중지 할 수있는 유일한 옵션 Exception가 발생하는 것입니다.

1

예외 상황에서 코드 실행을 중지하려면 예외를 throw 할 수 있습니다. 이렇게하면 throw 문 다음에 오는 코드 행이 실행되지 않고 특정 예외 유형 및 catch 블록의 코드와 일치하는 첫 번째 try-catch이 실행될 때까지 예외가 스택 위로 버블 링됩니다. 호출 스택에 적합한 try-catch 블록이 없으면 프로세스가 종료되고 메시지가 사용자에게 표시됩니다.

일반 실행의 일부분 인 으로 프로그램의 흐름을 변경하는 데 예외를 사용하면 안됩니다. 예외는보고 할 때만 사용하고 은 오류 조건을 처리해야합니다.

Exception을 던지려면 throw 문을 사용할 수 있습니다.예를 들어 : 자세한 내용은

public string GetObjectTypeName(object something) 
{ 
    if(something==null) 
     throw new Exception("Some Exception Message"); 

    return something.GetType().Name; 
} 

이러한 리소스에 대해 살펴 :

+0

예외는 내가 MessageBox를 사용하기 때문에 답이 아닙니다. 그렇지 않으면 Exception의 UI가 사용자로부터 살아있는 똥을 겁주는 것입니다. 어쨌든 고마워. – Linesofcode

+0

무서운 예외 UI를 표시하지 마십시오! 'try-catch' 블록을 사용하여'Exception'을 처리하고'MessageBox'를 표시하거나 오류를 기록하거나 사용자로부터 숨기거나 다른 복구 작업을 수행 할 수 있습니다. 또한'Application.ThreadException'또는'AppDomain.CurrentDomain.UnhandledException' 이벤트는 당신이 그들에 대해 더 알아야 할 다른 유용한 것들입니다. 나는 예외를 사용하는 것이 당신이 가야 할 방법이라고 생각한다. 내가 대답으로 올린 유용한 링크를 살펴 보자. –

+0

목표는 두 줄의 코드를 사용하는 것입니다. 1. 조건, 2. 응답. 물론 Try Catch 블록, return 또는 else 조건을 사용할 수는 있지만 그게 내 목표는 아닙니다. – Linesofcode