문자열을 텍스트 상자로 바인딩하고 싶습니다. 문자열은 지속적으로 스레드에서 업데이트되는 :지속적으로 문자열을 텍스트 상자로 바꿉니다.
나중에 바인딩 선언에String inputread;
public event PropertyChangedEventHandler PropertyChanged;
public string InputRead
{
get { return inputread; }
set
{
if (Equals(inputread, value) == true) return;
inputread = value;
this.OnPropertyChanged(nameof(this.inputread));
}
}
void threadFunc()
{
try
{
while (threadRunning)
{
plc.Read();
InputRead =plc.InputImage[1].ToString();
MessageBox.Show(InputRead);
}
}
catch (ThreadAbortException)
{
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
:이 (텍스트 상자가 완전히 비어)는 작동하지 않는 이유
Binding bind = new Binding("InputRead");
bind.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(newtextbox, TextBox.TextProperty, bind);
나는 문제의 그 부분을 이해 스레드를 실행할 때마다 새로 고치지 않기 때문입니다. 어떻게해야합니까? 또한 바인딩 선언에 결함이있는 것으로 판단됩니다.
데이터 바인딩에 대한 MSDN 기사를 읽었을 때 도움이되었습니다.
나는 그것이 내가 이전까지 Stackoverflow의 도움으로, 지금까지 아무런 성공도 얻지 못했다.
편집 : 코드를 약간 편집했지만 아직 텍스트 상자는 비어 있습니다 (0이 아님). 나는 wpf를 사용하고있다! 쉬울 경우 다른 사람이 나를 dispatcher.invoke를 사용하도록 유도 할 수 있습니까?
감사합니다.
재산에
TextBox
을 결합해야합니까? 'Winforms','WPF' – Fabiowpf, – zadrian
_ 누군가가 dispatcher.invoke_를 사용하도록 안내 할 수 있습니다. Wpf는 크로스 스레드 안전합니다. 발생 된 PropertyChanged 이벤트는 UI 스레드로 마샬링됩니다. – Fabio