【问题标题】:Unable to access the UI control's value from non UI thread in silverlight application无法从 silverlight 应用程序中的非 UI 线程访问 UI 控件的值
【发布时间】:2013-09-25 11:31:43
【问题描述】:

我正在使用 silverlight 5 应用程序为 CRM 2011 创建 Web 资源。在我的代码中,我使用 BeginExecute 和 EndExecute 方法来检索用于安排约会的可用时间段。否在 EndExecute 方法中,我得到了可以提出会议请求的所有可用时间段。现在,当我得到可用时隙时,我必须检查所有时隙的开始时间,并在 UI 上选择开始时间(在 UI 上我使用了 DateTimePicker),为此我必须从 DateTimePIcker 中读取值。为此,我尝试了 DateTimePIcker.SelectedDateTime 但它给了我错误提示“无效的跨线程访问”。

我搜索了这个问题,发现 UI 操作不能用非 UI 线程执行。他们建议使用 Dispatcher.BeginInvoke(),

我已经尝试过以下是我的代码片段

DateTime ScheduledDateTime = new DateTime();
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => ScheduledDateTime = Convert.ToDateTime(MainDateTimePicker.SelectedDateTime));

但仍然在变量 ScheduledDateTime 中,我得到“new DateTime()”的值

您能否建议我一种从非 UI 线程获取 DateTimePicker 值的方法。

【问题讨论】:

    标签: silverlight silverlight-4.0 dynamics-crm-2011 silverlight-5.0


    【解决方案1】:

    您可以这样做的一种方法是在调用BeginExecute 方法之前,将DateTimePicker 的值保存到一个变量中。然后你可以读取这个变量,甚至可以从另一个线程中读取。

    【讨论】:

    • 史蒂夫,是的,我也遵循了这种方式。但我想知道一些更好的方法来做到这一点。我的意思是我不能为这样的事情使用全局变量。这是不可接受的。虽然我很感激你花时间。谢谢。
    • 你是对的,通过一些 Lambda 执行此操作是一个更好的选择,但我的 lambda 低于标准,我的 C# 甚至更差。希望其他人可以在这里插话。
    • 试试这个链接。它可能会得到你想要的:stackoverflow.com/questions/2491927/…
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多