我在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