2017-03-15 6 views
0

だから私はdatagridviewで呼び出しを行い、それを実行する最初のスレッドでうまく動作するメソッドを持っていますが、2番目のスレッドがメソッドを利用しようとすると、機能は、しかし、呼び出し文が最初のスレッドのために働くと多分これがお手伝いします私は複数のスレッドでSQLコマンドを呼び出せません。C#

public void ByteTransferResume(int indexResume) 
{ 
    HttpWebRequest req; 
    HttpWebResponse resp; 
    req = (HttpWebRequest)HttpWebRequest.Create(FileLocationName); 
    req.AddRange((int)fileInfoDestination.Length); 
    resp = (HttpWebResponse)(req.GetResponse()); 
    long fileLength = resp.ContentLength; 
    FileLocationLength = fileLength; 
    using (Stream responseStream = resp.GetResponseStream()) 
    { 
     int iBufferSize = 1024; 
     iBufferSize *= 1000; 
     using (FileStream saveFileStream = new FileStream(FileDestination, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) 
     { 
      int iByteSize; 
      byte[] downBuffer = new byte[iBufferSize]; 

      while ((iByteSize = responseStream.Read(downBuffer, 0, downBuffer.Length)) > 0) 
      { 
       saveFileStream.Write(downBuffer, 0, iByteSize); 

       FileInfo fileInfoDestinations = new FileInfo(FileDestination); 

       FileDestinationLength = (int)fileInfoDestinations.Length; 

       double downloadProgress = ((double)FileDestinationLength/FileLocationLength) * 100; 

       // MessageBox.Show(downloadProgress.ToString()); 

       dgvDownloadInfo.Invoke(new dgvCommandDelegate(DGVCommand), new object[] { $"UPDATE Download_Info SET [Progress] = '{downloadProgress:F2}%' WHERE [File Name] = '{thread1[indexResume].Name}'" }); 

       //MessageBox.Show(thread1[indexResume].Name); 
       //MessageBox.Show(indexResume.ToString()); 
       // dgvDownloadInfo.Invoke(new dgvConnectionDelegate(DGVConnection)); 
       Thread.Sleep(10); 
      } 
     } 
    } 
} 
+0

あなたは、ロック()ステートメントを追加してみましたか? – daniell89

+0

私はロックステートメントに慣れていないのですか? – foreveraphone

+0

あなたはどのRDBMSを使用していますか? –

答えて

0

の両方を変更するには開始、停止、まだそれの一部をダウンロードしてください:

public object _lock = new object(); 
public void ByteTransferResume(int indexResume) 
{ 
    lock (_lock) 
    { 
     HttpWebRequest req; 
     //rest of your method   
    } 
    } 
+0

を上書きしていますが、それはうまくいきませんでした。とにかく感謝しています。すべての人に感謝しています。 :) – foreveraphone

関連する問題