내 Windows 양식에서 "tb_LogBox"텍스트 상자가 텍스트 상자와 단추가 있는데, 함수를 호출해야하는 백그라운드 작업자를 만들려고합니다. 즉 " LogTimer.DnT() "컴파일 할 때 Visual Studio에서 InvalidOperationException을 throw합니다.C# InvalidOperationException 및 크로스 스레드 작업
실제로 오류가 발생합니다 크로스 스레드 작업이 유효하지 않습니다 : 생성 된 스레드가 아닌 다른 스레드에서 액세스 된 컨트롤 'tb_LogBox'가 유효합니다. 다음 샘플 코드는 I 당신은 UI 스레드에서 컨트롤의 메소드를 호출 할 필요가
private void button1_Click(object sender, EventArgs e)
{
try
{
var bw = new BackgroundWorker();
bw.DoWork += ExecuteOperations ;
bw.RunWorkerAsync();
}
catch (Exception ex)
{
tb_LogBox.AppendText(Environment.NewLine + " [email protected]= " + ex.Message+" "+ex.Source);
}
}
private void ExecuteOperations(object sender, DoWorkEventArgs e)
{
var FuncCall = new LogTimer();
tb_LogBox.AppendText(Environment.NewLine + FuncCall.DnT()); // the line i am getting the error. on
}
public class LogTimer
{
public string DnT()
{
const string datePat = @"d/MM/yyyy";
var dateTime = DateTime.Now();
return dateTime.ToString(datePat);
}
}