2014-02-28 4 views
0

내 C# 프로그램의 경우 아래 개체를 만듭니다.하위 클래스의 기본 폼 액세스

private void timer2_Tick(object sender, EventArgs e) 
{ 
    processurls1.pURLS(UrlList, URLCountOf, HTTP, label1, TotalURLS2, TotalURLS); 
} 

이 타이머 모든 500milliseconds 내 processurls1 개체의 pURLS 기능을 트리거 :

processurls processurls1 = new processurls(); 

내가 그것을 만든 후 나는 실행 내 타이머를 시작하는 버튼을 클릭합니다. 매번 기본 양식 Label1.text를 업데이트 할 것입니다. 하지만 내 문제는 레이블을 한 번만 업데이트하고 내 프로그램은 매우 까다 롭습니다. 레이블 객체 & picturebox 객체를 내 서브 클래스에 전달하여 지연없이 주 양식에서 올바르게 업데이트 할 수있는 안전한 방법은 무엇입니까?

public void pURLS(List<string> UrlListOf, int Count, Images HTTP, Label label1, int TotalURLS2, int TotalURLS) 
{ 
    try 
    { 
     string WebResponse = HTTP.DoGET(UrlListOf[Count]); 
     string pattern = "href=\"(.*?)\""; 
     MatchCollection OtherURLS = Regex.Matches(WebResponse, pattern); 
     for (int i = 0; i < OtherURLS.Count; i++) 
     { 

      Match HasHttp = Regex.Match(OtherURLS[i].Value, "http"); 
      if (HasHttp.Success) 
      { 
       string CleanedUp = Regex.Replace(OtherURLS[i].Value, "href=\"", ""); 
       CleanedUp = Regex.Replace(CleanedUp, "\"", ""); 

       UrlListOf.Add(CleanedUp); 
       TotalURLS2++; 
      } 
      else 
      { 
       string CleanedUp = Regex.Replace(OtherURLS[i].Value, "href=\"", ""); 
       CleanedUp = Regex.Replace(CleanedUp, "\"", ""); 
       CleanedUp = UrlListOf[TotalURLS2] + "" + CleanedUp; 
       UrlListOf.Add(CleanedUp); 
       TotalURLS2++; 
      } 
     } 

     label1.Text = "U:" + TotalURLS2.ToString(); 
    } 
    catch (Exception) 
    { 
    } 
} 
+0

가장 먼저해야 할 일은이 예외적 인 'catch'블록을 제거하여 실제로 발생할 수있는 오류를 확인하는 것입니다. 우연히 있다. –

답변

0

비동기 적으로 학습해야합니다.

아마도 500 밀리 초만으로는/데이터를 가져올 수 없습니다. 대신 타이머를 사용하는, 당신의 "로드 양식"에 MainForm

public async Task UpdateMyLabels() 
{ 
    while (true) //change here by something more reliant 
    { 
     await processurls1.pURLS(UrlList, URLCountOf, HTTP, label1, TotalURLS2, TotalURLS); 
     Thread.Sleep(200); //ajust value here 
    } 
} 

에서 [XX의 MS 수면

와 비동기 작업을 사용하여 이벤트 :

{ 
     UpdateMyLabels(); 
} 
마지막으로

은 "비동기 추가 "pUrls의 키워드 :

public async Task pURLS 
+0

'무효'를 기다릴 수 없습니까? – Illuminati

0

내 모든 변수를 클래스 자체로 이동하십시오. 이제 백그라운드 워커의 속성에 액세스하고 기본 양식을 업데이트 할 수 있습니다. D

static int ImageCount = 0; 
    static int currentImage = 0; 
    Images HTTP = new Images(); 
    List<string> UrlList; 
    static List<string> ImageCollection = new List<string>(); 

    public List<string> Images 
    { 
     get 
     { 
      return ImageCollection; 
     } 
     set 
     { 
      ImageCollection = value; 
     } 
    } 

    public int CurrentImage 
    { 

     get 
     { 
      return currentImage; 
     } 
     set 
     { 
      currentImage = value; 
     } 
    } 
    public int Count 
    { 
     get 
     { 
      return ImageCount; 
     } 
     set 
     { 
      ImageCount = value; 
     } 
    } 

    public List<string> URLS 
    { 
     get 
     { 
      return UrlList; 
     } 
     set 
     { 
      UrlList = value; 
     } 
    } 
관련 문제