2013-01-09 3 views
2

내 wpf 응용 프로그램에 사용자 정의 드래그 앤 드롭 커서를 포함하여 검색했습니다. 나는 (이 코멘트와 함께 강조)에서 제안 된 코드 한 줄의 아무 생각이없는 article으로 돌아가 셨습니다 :GetManifestResourceStream - 어떻게 캐싱을 도와 줄 수 있습니까?

private void textBlock2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     TextBlock btn = (TextBlock)sender; 

     GiveFeedbackEventHandler handler = new GiveFeedbackEventHandler(DragSource_GiveFeedback); 
     btn.GiveFeedback += handler; 


     DataObject dataObj = new DataObject(btn.Text); 
     DragDrop.DoDragDrop(btn, dataObj, DragDropEffects.Move); 
     btn.GiveFeedback -= handler; 

    } 

    void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e) 
    { 
     try 
     { 
      if (_allOpsCursor == null) 
      { 

       ////////////////////////////////////////THE UNKOWN ONE LINE STARTS HERE 
       using (Stream cursorStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SimplestDragDrop.DDIcon.cur")) // AND ENDS HERE 
       { 
        _allOpsCursor = new Cursor(cursorStream); 
       } 
      } 
      Mouse.SetCursor(_allOpsCursor); 

      e.UseDefaultCursors = false; 
      e.Handled = true; 
     } 
     finally { } 
    } 

내가 GetManifestResourceStream 체크를하지만 난 여전히 mainfest 자원이 무엇인지 모른다 어떻게 처리 할 수 ​​있고이 캐싱 아이디어 (주요 기사에서 언급 했음)를 작동시킬 수있는 곳을 시작할 수 있습니다.

답변

1

어셈블리가 CLR에서 실행되는 AppDomain의 일부로 메모리에로드됩니다. 따라서 리소스가 컴파일 프로세스의 일부로 어셈블리에 포함 된 경우 스트림을 사용하여 메모리 내 바이트 배열을 읽는 것이 디스크로 이동하여 파일을 열고, 내용을 읽고, 파일을 닫는 것보다 빠릅니다 .

대체로 소스 코드 내에 리소스를 나타내는 바이트 배열을 저장하는 것이지만 GetManifestResourceStream을 사용하여 같은 위치에 어느 정도 도착할 수 있습니다.

관련 문제