Я пытаюсь использовать поточно-ориентированные вызовы элементов управления пользовательского интерфейса из формы C #.По какой-то причине BackgroundWorkerHelper недоступен, возможно, это связано с версией C # или из-за того, что я выполняю развертывание на «устройстве Window CE 5.0».
У меня есть
//For ThreadSafe called to edit components
private delegate void SetControlPropertyThreadSafeDelegate(Control control, string propertyName, object propertyValue);
public static void SetControlPropertyThreadSafe(Control control, string propertyName, object propertyValue)
{
if (control.InvokeRequired)
{
control.Invoke(new SetControlPropertyThreadSafeDelegate(SetControlPropertyThreadSafe), new object[] { control, propertyName, propertyValue });
}
else
{
control.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, control, new object[] { propertyValue });
}
}
И вызываю поток как этот
private Thread workerThread = new Thread(new ThreadStart(this.remoteRequestBackgroundTask));
workerThread.Start();
Затем внутри функции remoteRequestBackgroundTask () я меняю элементы управления следующим образом:
//enable the cancel button
SetControlPropertyThreadSafe(btnCancel, "Enabled", true);
Проблема в том, что когда он запускается,отладка останавливается здесь
control.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, control, new object[] { propertyValue });
, и я получаю "NotSupportedException"