2015-09-04 51 views
1
TaskCompletionSource<bool> sy; 
     public string SendResponse(HttpListenerRequest request) 
     { 
      string result = ""; 
      string key = request.QueryString.GetKey(0); 
      if (key == "cmd") 
      { 
       if (request.QueryString[0] == "upload status") 
       { 
        if (Youtube_Uploader.fileuploadstatus == "uploading file") 
        { 
         Youtube_Uploader.fileuploadstatus = ""; 
         return "uploading"; 
        } 
        else 
        { 
         return "upload unknown state"; 
        } 

        if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully") 
        { 
         Youtube_Uploader.fileuploadstatus = ""; 
         return "upload completed"; 
        } 
        else 
        { 
         return "upload unknown state"; 
        } 
       } 
       if (request.QueryString[0] == "nothing") 
       { 
        return "Connection Success"; 
       } 
       if (request.QueryString[0] == "start") 
       { 
        StartRecrod(); 
        result = "Recording started"; 
       } 

       if (request.QueryString[0] == "stop") 
       { 
        dirchanged = false; 
        StartRecrod(); 
        result = "Recording stopped and preparing the file to be shared on youtube"; 
        sy = new TaskCompletionSource<bool>(); 
        WatchDirectory(); 
        sy.Task.Wait(); 
        Youtube_Uploader youtubeupload = new Youtube_Uploader(fileforupload); 

       } 
      } 
      else 
      { 
       result = "Nothing have been done"; 
      } 

      return result; 

     } 

這條線:爲什麼第二個IF語句檢測到Unrachable代碼?

if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully") 

的 '如果' 是綠色的下劃線,說檢測不到的代碼。 我該如何解決它,爲什麼它是無法訪問的代碼?

也許我需要使用result =而不是返回?但這似乎不是問題所在。

回答

10

因爲上面,您有:

if (...) 
{ 
    return "uploading"; 
} 
else 
{ 
    return "upload unknown state"; 
} 

無論是ifelse是真實的,那麼代碼會從該塊反正回,將它下面的代碼將不會被執行。

你有三個選擇,讓你似乎是在尋找一個switch這是最易讀在這種情況下:

switch (Youtube_Uploader.fileuploadstatus) 
{ 
    case "uploading file": 
     Youtube_Uploader.fileuploadstatus = ""; 
     return "uploading"; 

    case "file uploaded successfully": 
     Youtube_Uploader.fileuploadstatus = ""; 
     return "upload completed"; 

    default: 
     return "upload unknown state"; 
} 

或者使用詞典的服務狀態轉換到應用程序的狀態,或使用如@Thiago所建議的if() else if() else

+0

CodeCaster它是偉大的工作。當狀態爲「上傳完成」時,只需要一件小事情,我想將其重置爲默認狀態爲「上傳未知狀態」,因爲我每秒檢查一次狀態,我希望一旦狀態爲「上傳完成」,然後緊跟其後重置它回到「上傳未知狀態」我的意思是使一旦返回「上傳完成」,但之後它重置爲默認值。 –

+0

@Harim我不確定你在問什麼。你可以把它分成'GetStatusMessage(string uploadStatus)'和'SetStatusMessage(string status)'方法,然後從你想要的地方調用那些(重新)設置狀態。 – CodeCaster

+0

@Harim我想我明白你的意思。爲了簡潔,我刪除了'Youtube_Uploader.fileuploadstatus =「」;'。現在我已將它們重新添加到它們各自的「案例」中。 – CodeCaster

5

因爲您的退貨聲明。它會停止if/else流。也許你正在尋找這樣的:

if (Youtube_Uploader.fileuploadstatus == "uploading file") 
        { 
         Youtube_Uploader.fileuploadstatus = ""; 
         return "uploading"; 
        } 
        else if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully") 
        { 
         Youtube_Uploader.fileuploadstatus = ""; 
         return "upload completed"; 
        }     
        else 
        { 
         return "upload unknown state"; 
        } 
0
if (Youtube_Uploader.fileuploadstatus == "uploading file") 
       { 
        Youtube_Uploader.fileuploadstatus = ""; 
        return "uploading"; 
        //return may happen here case 1 
       } 
       else 
       { 
        return "upload unknown state"; 
        // or here case 2 
       } 

只有兩種情況是可能的。

   if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully") 

變換你的代碼如下:

if (Youtube_Uploader.fileuploadstatus == "uploading file") 
       { 
        Youtube_Uploader.fileuploadstatus = ""; 
        return "uploading"; 
        //return can happen here. Case 1 
       } 
       else if(some another condition) // case 2 
       { 
        return "upload unknown state"; 
        // or here case 2 
       } 
       //now this code is reachable 
       if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully") 
相關問題