我在wpf c#中制作了一个程序。 我做了一个拖放处理程序,它将一些项目添加到列表框中。虽然程序正在这样做(这需要一些时间),但我希望Grid将其属性可见性更改为可见,并且我想更新文本框以显示用户正在处理的文件。代码如下:wpf拖放显示处理弹出
UPDATE:解决方案的实施尽量
BackgroundWorker bgWorker = new BackgroundWorker();
private void Dropaudio(object sender, System.Windows.DragEventArgs e)
{
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.ProgressChanged +=
new ProgressChangedEventHandler(bgWorker_ProgressChanged);
bgWorker.WorkerReportsProgress = true;
this.Drop += new DragEventHandler(Dropaudio);
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] droppedFilePaths =
e.Data.GetData(DataFormats.FileDrop, true) as string[];
List<string> Jobs = new List<string>(droppedFilePaths);
bgWorker.RunWorkerAsync(Jobs);
}
}
void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage == 0)
{
Addingcues.Visibility = Visibility.Visible;
}
addcuepath.Text = e.UserState.ToString();
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
List<string> Jobs = e.Argument as List<string>;
bgWorker.ReportProgress(0, "Processing Data");
double count = 0;
double total = Jobs.Length;
foreach (string droppedFilePath in Jobs)
{
if (System.IO.Path.GetExtension(droppedFilePath) == ".mp3" ||
System.IO.Path.GetExtension(droppedFilePath) == ".wav" ||
System.IO.Path.GetExtension(droppedFilePath) == ".flac")
{
double pct = count/total;
// Report this file
bgWorker.ReportProgress((int) (pct * 100), droppedFilePath);
var provider = (XmlDataProvider)this.Resources["CUEData"];
XmlDocument xmlcuelijst = provider.Document;
XmlNode cueshow = xmlcuelijst.SelectSingleNode("CUEShow");
XmlNode maincues = cueshow.SelectSingleNode("Maincues");
XmlElement Maincue = xmlcuelijst.CreateElement("Maincue");
XmlElement nr = xmlcuelijst.CreateElement("nr");
XmlElement Description = xmlcuelijst.CreateElement("Description");
XmlElement Cuetype = xmlcuelijst.CreateElement("Cuetype");
XmlElement Name = xmlcuelijst.CreateElement("Name");
XmlElement Path = xmlcuelijst.CreateElement("Path");
XmlElement Duration = xmlcuelijst.CreateElement("Duration");
XmlElement Type = xmlcuelijst.CreateElement("Type");
XmlElement Fade = xmlcuelijst.CreateElement("Fade");
XmlElement Fadein = xmlcuelijst.CreateElement("Fadein");
XmlElement Fadeout = xmlcuelijst.CreateElement("Fadeout");
XmlElement Delay = xmlcuelijst.CreateElement("Delay");
XmlElement Delaytime = xmlcuelijst.CreateElement("Delaytime");
XmlElement Loop = xmlcuelijst.CreateElement("Loop");
XmlElement FX = xmlcuelijst.CreateElement("FX");
XmlElement Filename = xmlcuelijst.CreateElement("Filename");
Maincue.AppendChild(nr);
Maincue.AppendChild(Cuetype);
Maincue.AppendChild(Name);
Maincue.AppendChild(Path);
Maincue.AppendChild(Description);
Maincue.AppendChild(Duration);
Maincue.AppendChild(Type);
Maincue.AppendChild(Fade);
Maincue.AppendChild(Fadein);
Maincue.AppendChild(Fadeout);
Maincue.AppendChild(Delay);
Maincue.AppendChild(Delaytime);
Maincue.AppendChild(Loop);
Maincue.AppendChild(FX);
count += 1;
}
}
}
void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Addingcues.Visibility = Visibility.Hidden;
}
此作品(改变数组列表),但在使用appendChild行动,代码只是突然停止运行,我设置了两个断点处第一个和第二个Appendchild行,第一个被触发,但第二个不被触发...
我试过这个,但问题仍然存在...... – internetmw 2010-08-17 18:06:48
看看你的代码上面 - 是Dropaudio方法只是事件处理程序?如果是的话,是什么让这个多线程? – 2010-08-17 19:02:19
它只是事件处理程序,我试过你的解决方案,但我不希望它在一个单独的类。现在,我只是声明一个新的后台工作人员,并在drop eventhandler中应用您的代码,网格显示但没有任何反应 – internetmw 2010-08-17 20:12:13