파일이 AVI가 아닌 경우 자동으로 변환하지만, 파일을 변환하는 파일이 이제 다른 형식으로 변환되는 레이블에 쓸 때 원하는 경우 ListBox가 있습니다. UI 스레드를 업데이트하려면 Dispatcher를 사용해야하지만 WPF 대신 Winform을 사용해야하므로이 기능에 대한 도움이 필요합니다. 내가 레이블 변경업데이트 UI 스레드
private void btnAdd_Click(object sender, EventArgs e)
{
System.IO.Stream myStream;
OpenFileDialog thisDialog = new OpenFileDialog();
thisDialog.InitialDirectory = "c:\\";
thisDialog.Filter = "All files (*.*)|*.*";
thisDialog.FilterIndex = 1;
thisDialog.RestoreDirectory = false;
thisDialog.Multiselect = true; // Allow the user to select multiple files
thisDialog.Title = "Please Select Source File";
thisDialog.FileName = lastPath;
List<string> list = new List<string>();
if (thisDialog.ShowDialog() == DialogResult.OK)
{
foreach (String file in thisDialog.FileNames)
{
try
{
if ((myStream = thisDialog.OpenFile()) != null)
{
using (myStream)
{
listBoxFiles.Items.Add(file);
lastPath = file;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
for (int i = 0; i < listBoxFiles.Items.Count; i++)
{
string path = (string)listBoxFiles.Items[i];
FileInfo fileInfo = new FileInfo(path);
if (fileInfo.Extension != ".AVI")
{
listToRemove.Add(path);
}
}
(new System.Threading.Thread(sendFilesToConvertToPcap)).Start();
foreach (string file in listToRemove) //remove all non .AVI files from listbox
{
listBoxFiles.Items.Remove(file);
}
}
}
이 기능의 필요성을 닷넷 3.5을 사용하고 있기 때문에 BTW 내가 작업을 사용할 수 없습니다 질문에서
public void sendFilesToConvertToPcap()
{
if (listToRemove.Count == 0) // nothing to do
{
return;
}
lblStatus2.Content = "Convert file to .AVI...";
foreach (String file in listToRemove)
{
FileInfo fileInfo = new FileInfo(file);
myClass = new (class who convert the files)(fileInfo);
String newFileName = myClass.mNewFileName;
listBoxFiles.Items.Add(myClass._newFileName);
}
lblStatus2.Content = "Finished...";
}
장기간 진행되는 프로세스 (백그라운드에서 전환이라고도 함)를 실행하고 변환 과정의 진행 상황으로 라벨을 업데이트 하시겠습니까? – bloudraak
'BackgroundWorker' 컴포넌트를 사용하십시오. –
여기에 질문이 뭐니? 긴 샘플 코드. 현지화 됨. 닫기! – usr