Вот один из способов «хорошей практики».
Во-первых, изменить ваш класс следующим образом
public class LeapEventListener : Listener
{
private string status = string.Empty;
public string Status { get { return status; } }
public event EventHandler StatusChanged;
private void SetStatus(string value)
{
if (value == null) value = string.Empty;
status = value;
var handler = StatusChanged;
if (handler != null) handler(this, EventArgs.Empty);
}
public override void OnFrame(Controller controller)
{
SetStatus("New Frame");
// process frame data...
}
public override void OnInit(Controller controller)
{
SetStatus("Initialized");
}
public override void OnConnect(Controller controller)
{
SetStatus("Connected");
//If using gestures, enable them:
controller.EnableGesture(Gesture.GestureType.TYPE_CIRCLE);
}
//Not dispatched when running in debugger
public override void OnDisconnect(Controller controller)
{
SetStatus("Disconnected");
}
}
Все, что я сделал, чтобы добавить общую собственность только для чтения, частный метод, чтобы установить его и событие изменения общественного имущества.
Затем просто добавьте следующую строку в виде нагрузки (конечно, после listener
создается):
yourLabel.DataBindings.Add("Text", listener, "Status");
, и вы сделали.
UPDATE: В соответствии с вами комментарии:
(A) Если вы хотите добавить к RichTextBox
. Привязка данные работают только со свойствами, так что в этом случае вы можете просто прикрепить обработчик события, например:
listener.StatusChanged += (_sender, _e) =>
{
yourRichTextBox.AppendText(listener.Status);
};
(B) Если методы прослушивателя называется из не потока пользовательского интерфейса, а затем забыть о связывании данных, использование обработчик событий, как описано выше, но несколько иным образом:
Action onStatusChanged =() =>
{
// Whatever UI element you want to update
yourLabel.Text = listener.Status;
yourRichTextBox.AppendText(listener.Status);
};
listener.StatusChanged += (_sender, _e) =>
{
if (InvokeRequired)
Invoke(onStatusChanged);
else
onStatusChanged();
};
Какой тип 'Контроллер' (какое пространство имен)? Кажется, это не '' System.Web.Mvc.Controller'' (https://msdn.microsoft.com/en-us/library/system.web.mvc.controller%28v=vs.118%29 .aspx), поскольку у этого нет метода «EnableGesture» или «AddListener». –
Leap type, is about leapmotion.com –
Кроме того, что подразумевается под «заменой метки из класса»? Я не понимаю эту фразу. Поскольку C# объектно-ориентированный, вы практически всегда находитесь в классе с тем, что вы делаете. Следовательно, я понятия не имею, как вы могли бы «изменить ярлык» без класса, или почему это было бы лучше, чем делать это «из класса». –