2013-05-23 4 views
0
여기

내가 점점 오전 오류입니다 형식 'System.Threading.ThreadStateException'의 예외가 system.windows.forms.dll에서 을 발생했지만 사용자 코드에서 처리되지 않은클립 보드 작업 오류

추가 정보 : OLE 호출이 가능하기 전에 현재 스레드가 단일 스레드 아파트 (STA) 모드로 설정되어야합니다. Main 함수에 STAThreadAttribute가 표시되어 있는지 확인하십시오.

Task 내에서 클립 보드에 값을 지정하려고합니다. 코드를 실행할 때 위의 오류가 발생합니다.

static public class ClipBoard 
    { 
     static private string _data = string.Empty; 
     static public Semaphore ClipBoardSemaphore = new Semaphore(1, 1); 

     static public void SetData(string data) 
     { 
      Clipboard.Clear(); //error here 
      Clipboard.SetDataObject(data, true); 
      _data = data; 
     } 

     static public string GetData() 
     { 
      return _data; 
     } 
    } 

클립 보드가 삭제 된 경우 오류가 발생 볼 수 있듯이 : 여기

클립 보드 코드입니다.

for (int i = 0; i < zom.Count; i++) 
{ 
    Task t = Task.Factory.StartNew(zom[i].Process); 
    t.Wait(); 
} 
+0

Winforms 또는 WPF? –

+0

콘솔 프로젝트 – Luke101

+0

을 사용하고 있습니다. 그러면 winforms 라이브러리를 사용할 것입니까? (System.Windows.Forms.Clipboard) –

답변

3

클립 보드가 만 STA 스레드에서 액세스 할 수 있습니다 (일반적으로 UI 스레드) : 다음은 작업을 호출하는 코드입니다. 따라서 클립 보드를 사용하여 UI 스레드 나 다른 STA 스레드를 호출해야합니다.