스레드에서 자주 액세스하는 StatusProgressBar가 있습니다.크로스 스레드 작업 확인/해결
[Browsable(true)]
public override string Text
{
get
{
return prg.Text ;
}
set
{
prg.Text = value;
}
}
그리고 prg.Text = 값은 문제가, 그것의 UI 스레드에서 액세스 할 때 (가끔) 이제이
public override string Text
{
get
{
return base.Text;
}
set
{
Misc.CrossThread(this , delegate
{
base.Text = value;
}, true);
}
public static void CrossThread(Control control, MethodInvoker d, bool forceSynchronous)
{
if (control.InvokeRequired)
{
if (forceSynchronous)
{
control.Invoke((Action)delegate { CrossThread(control, d, forceSynchronous); });
}
else
{
control.BeginInvoke((Action)delegate { CrossThread(control, d, forceSynchronous); });
}
}
else
{
if (control.IsDisposed)
{
throw new ObjectDisposedException("Control is already disposed.");
}
d();
}
}
과 같다 : -이을 보장하기 위해, Text 속성은 다음과 같다 , 텍스트가 변경되지 않습니다 .. ex.
if (cbGateway.SelectedIndex == -1)
{ bp.Text = "Select GATEWAY"; return; }
여기서 'bp'는 StatusProgressBar
개체를 나타냅니다. 내가
{ bp.Text = "Select GATEWAY"; return; }
에 중단 점을 넣고 계속하면
지금, 모든 것이 예상대로 텍스트 변경 ... 왜 텍스트가 처음으로 변경되지 않습니다 어떻게됩니까?
질문을 읽어주십시오. –
@PeterPAD : 질문을 읽었습니다. OP는 "이제 문제는 UI 스레드 (때로는)에서 텍스트에 액세스 할 때 텍스트가 변경되지 않는다는 것입니다."라고 말하면서 UI 스레드에서 오랫동안 실행중인 작업에서 업데이트를 호출 할 것이라고 생각했습니다. 힌트를주고 싶었다. ; 그래서 나는 당신의 downvoting 이해가 안 돼요 ... – Fischermaen
Thnx는 대답을, 거의 내 문제를 해결하지만, (이, { base.Text = 값을} 위임 내가 크로스를 물어보고 싶은 한 가지가있다 참된); } "기본 키워드 결과를 통해 텍스트에 대한 액세스가 확인되지 않는 코드로 표시됩니다"라는 경고가 여기에 표시됩니다. - 무엇인가 –