2013-10-14 68 views
-1

Im在文件對話框中選擇文件時,我的程序掛起時遇到了一些麻煩。這是顯示文件瀏覽器對話框的代碼:我已經收窄的問題倒在「如果」語句和之間掛在DialogResult.OK上的應用程序

private void isForgeIncluded_btn_Click(object sender, EventArgs e) 
    { 
     this.isForgeIncluded.Text = FolderFileDialog("file", isForgeIncluded.Text, "Forge installer file (*.jar)|*.jar"); 
    } 

    public string FolderFileDialog(string type, string current, string fileTypes = "All files (*.*)|*.*|All files (*.*)|*.*", string StartFolder = "C:\\") 
     string ReturnString = current; 
     if (current != "") 
     { 
      StartFolder = Path.GetFullPath(current); 
     }    
     if (type == "file") 
     { 
      OpenFileDialog minecraftFile = new OpenFileDialog(); 
      minecraftFile.Title = "Select file"; 
      minecraftFile.InitialDirectory = StartFolder; 
      minecraftFile.RestoreDirectory = true; 

      minecraftFile.Filter = fileTypes; 
      if (minecraftFile.ShowDialog() == DialogResult.OK) 
      { 
       ReturnString = minecraftFile.FileName; 
       return ReturnString; 
      } 
      minecraftFile = null; 
     } 
     return ReturnString; 
    } 

「返回字符串= minecraftFile.FileName;」 ..使用調試器時,程序需要在這兩條線之間休息五秒鐘。在休息之後,它返回並返回值,就像沒有錯誤一樣。但是,即使程序從不向我顯示任何錯誤消息,IntelliTrace有時也會出現「FileNotFound異常」,並將正確的值返回到文本框中。

奇怪的是,它並不總是發生這種情況。它是隨機的,即使我選擇與上次相同的文件也可能發生。我選擇的文件也是系統驅動器上的本地文件。

什麼可能是錯的?代碼看起來應該如何?

+0

最後一個:'if(minecraftFile.ShowDialog()== DialogResult.OK){' –

+0

您在本地磁盤上瀏覽的是文件/目錄嗎? – codemonkeh

+0

是的文件是前面陳述的本地文件 –

回答

3

兩個基本問題可能會導致OpenFileDialog出現問題。首先是你的機器上安裝了錯誤的shell擴展,當你打開對話框時,它們會被加載到你的進程中。一個基本的檢查是你沒有看到記事本的File + Open命令出現問題,並且在對話框處於活動狀態時,Visual Studio Output窗口中沒有看到任何特殊的內容。啓用非託管調試可爲您提供更多信息。

第二個原因是您的UI線程的線程狀態有問題。如果必須初始化爲單線程單元才能夠正確顯示此對話框。回到Main()方法,通常在Program.cs中,並確保它具有[STAThread]屬性。

如果這樣不能消除,那麼我們需要更多有關錯誤行爲代碼的信息。您需要啓用非託管調試,Project + Properties,Debug選項卡。並啓用Microsoft符號服務器,工具+選項,調試,符號。並禁用只是我的代碼調試,工具+選項,調試,常規。在調試失敗併發布「調用堆棧」窗口的內容後,請點擊「調試+中斷」。

+0

我的結論是它必須是一些shelle擴展名。不知道什麼,雖然,因爲它在我的筆記本電腦和主要PC上。你用記事本的提示證明,這不是我的代碼,因爲它也發生在記事本中。在我的電腦上工作,但沒有問題。感謝您的提示!這可能對其他人有用! –

+0

使用SysInternals Autoruns實用程序禁用外殼擴展。 –

相關問題