我想要做的事: 我在WPF(c#)中使用Web服务DLL。该DLL包含一个Web服务,您可以在我的代码中看到它为SmsSender
类。调用这个类的每个方法是耗时所以我需要在其他线程中运行它的方法。程序冻结时调用component.Dispatcher.BeginInvoke()
我该怎么做: 我将DataView对象(即方法中的“返回值”)设置为DataGrid的ItemsSource。所以我用Dispatcher.BeginInvoke()
。
我的问题: 我的问题是使用Dispatcher.BeginInvoke()
可以冻结我的程序,即使我在不同的线程中运行它。我想要调用方法而不冻结。是否可以定义超时?
UPDATE1:
我怎样才能设置数据视图从耗时的方法DataGrid中?
我的代码:
Action action =() =>
{
SmsSender sms = new SmsSender();
dgUser1.ItemsSource = sms.GetAllInboxMessagesDataSet().Tables[0].DefaultView;
};
dgUser1.Dispatcher.BeginInvoke(action);
在此先感谢
这是由设计。 Dispatcher.BeginInvoke()只应该被调用来完成与UI交互的工作。 – Aron
我如何重新设计我的项目?任何想法? –
'Dispatcher.BeginInvoke'在创建'Dispatcher'的线程上执行委托。通常你可以使用它来从另一个线程**上更新UI线程**上的内容。由于您在委托中包含耗时的调用,这意味着所有内容都在UI线程上运行。 – pescolino