C# 在将LINQ写入XML arrray时更新控件?

C# 在将LINQ写入XML arrray时更新控件?,c#,linq-to-xml,C#,Linq To Xml,我有一段代码,它使用LING-to-XML成功地从数组中写入了一个XML文件 XDocument docXML = new XDocument( new XDeclaration("1.0", "UTF-8", "yes"), new XElement("recordings", from Recording r in GetRecordings(ctrl_inFileDir.Text, wmcTypes,

我有一段代码,它使用LING-to-XML成功地从数组中写入了一个XML文件

XDocument docXML = new XDocument(
            new XDeclaration("1.0", "UTF-8", "yes"),
            new XElement("recordings",
                from Recording r in GetRecordings(ctrl_inFileDir.Text, wmcTypes,     ctrl_useMCEDir.Checked, ctrl_mceDir.Text)
                select new XElement("Recording",
                       new XElement("oid", r.oid),
                       new XElement("name", r.name),
                       new XElement("channel", r.channel),
                       new XElement("filename",r.filename),
                       new XElement("status",r.status),
                       new XElement("startTime",r.startTime),
                       new XElement("endTime",r.endTime),
                       new XElement("Event",
                           new XElement("OID",r.EventOID),
                           new XElement("Title",r.EventTitle),
                           new XElement("SubTitle",r.EventSubTitle),
                           new XElement("Description",r.EventDescription),
                           new XElement("ChannelOID",r.EventOID),
                           new XElement("StartTime",r.EventStartTime),
                           new XElement("EndTime",r.EventEndTime)))
    )
    ); 

我想更新对话框中的控件,以更新xml创建的进度。我能在这里做这个吗?如果是这样的话,怎么做?

我不认为你可以用linq做到这一点,你应该这样做

namespace WpfApplication4
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
   public partial class MainWindow : Window
   {
    BackgroundWorker _backgroundWorker = new BackgroundWorker();  
      public MainWindow()
      {
          InitializeComponent();
          _backgroundWorker.DoWork += _backgroundWorker_DoWork;
          _backgroundWorker.ProgressChanged += _backgroundWorker_ProgressChanged;
          _backgroundWorker.WorkerReportsProgress = true;  
         _backgroundWorker.RunWorkerAsync(); 


    }

    void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        var  recordings  = GetRecordings(ctrl_inFileDir.Text, wmcTypes,     ctrl_useMCEDir.Checked, ctrl_mceDir.Text);  
        int recCount =  recordings.Count; 
        int i=0 ;  
        foreach (var recording in recordings )
        {
            XElement  xDoc = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"),new  XElement("Recording",
                   new XElement("oid", r.oid),
                   new XElement("name", r.name),
                   new XElement("channel", r.channel),
                   new XElement("filename",r.filename),
                   new XElement("status",r.status),
                   new XElement("startTime",r.startTime),
                   new XElement("endTime",r.endTime),
                   new XElement("Event",
                       new XElement("OID",r.EventOID),
                       new XElement("Title",r.EventTitle),
                       new XElement("SubTitle",r.EventSubTitle),
                       new XElement("Description",r.EventDescription),
                       new XElement("ChannelOID",r.EventOID),
                       new XElement("StartTime",r.EventStartTime),
                       new XElement("EndTime",r.EventEndTime));
            _backgroundWorker.ReportProgress(i/recCount);


        }
    }

    void _backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        prgBar.Value = e.ProgressPercentage;  
    }

}
命名空间WpfApplication4
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
BackgroundWorker_BackgroundWorker=新的BackgroundWorker();
公共主窗口()
{
初始化组件();
_backgroundWorker.DoWork+=\u backgroundWorker\u DoWork;
_backgroundWorker.ProgressChanged+=\u backgroundWorker\u ProgressChanged;
_backgroundWorker.WorkerReportsProgress=true;
_backgroundWorker.RunWorkerAsync();
}
void\u backgroundWorker\u DoWork(对象发送方,DoWorkEventArgs e)
{
var recordings=GetRecordings(ctrl\u infiredir.Text、wmcTypes、ctrl\u usemedir.Checked、ctrl\u mceDir.Text);
int recCount=记录。计数;
int i=0;
foreach(记录中的var记录)
{
XElement xDoc=新XDocument(新XDeclaration(“1.0”、“UTF-8”、“是”),新XElement(“录制”,
新元素(“oid”,r.oid),
新XElement(“名称”,r.name),
新XElement(“通道”,右通道),
新XElement(“文件名”,r.filename),
新XElement(“状态”,r.status),
新XElement(“startTime”,r.startTime),
新XElement(“结束时间”,r.endTime),
新XElement(“事件”,
新XElement(“OID”,r.EventOID),
新XElement(“标题”,r.EventTitle),
新XElement(“副标题”,r.EventSubTitle),
新XElement(“描述”,r.EventDescription),
新XElement(“ChannelOID”,r.EventOID),
新XElement(“StartTime”,r.EventStartTime),
新XElement(“EndTime”,r.EventEndTime));
_backgroundWorker.ReportProgress(i/recCount);
}
}
void\u backgroundWorker\u ProgressChanged(对象发送方,ProgressChangedEventArgs e)
{
prgBar.值=e.百分比;
}
}
}
希望此帮助

如果您是在后台工作人员中执行此操作,您可以插入linq语句。