C # Как установить код запуска в окончательном - PullRequest
1 голос
/ 11 апреля 2011

Мне нужно установить строку кода для запуска после того, как все закончится. Кто-нибудь знает, как это сделать?

private void ScanBT_Click(object sender, EventArgs e)
        {
            var folder = @"C:\Users\Shen\Desktop\LenzOCR\LenzOCR\WindowsFormsApplication1\ImageFile";

            DirectoryInfo directoryInfo;
            FileInfo[] files;
            directoryInfo = new DirectoryInfo(folder);
            files = directoryInfo.GetFiles("*.jpg", SearchOption.AllDirectories);

            var processImagesDelegate = new ProcessImagesDelegate(ProcessImages2);
            processImagesDelegate.BeginInvoke(files, null, null);


            **//HERE IS THE LINE OF CODE THAT NEED TO BE RUN AFTER EVERYTHING FINISH RUN
            System.IO.File.Delete(@"C:\Users\Shen\Desktop\LenzOCR\TempFolder\tempPic.jpg");**
        }

        private void ProcessImages2(FileInfo[] files)
        {
            var comparableImages = new List<ComparableImage>();

            var index = 0x0;

            foreach (var file in files)
            {
                if (exit)
                {
                    return;
                }

                var comparableImage = new ComparableImage(file);
                comparableImages.Add(comparableImage);
                index++;
            }

            index = 0;

            similarityImagesSorted = new List<SimilarityImages>();
            //MessageBox.Show("here"+singleFileInfo.FullName);
            var fileImage = new ComparableImage(singleFileInfo);

            for (var i = 0; i < comparableImages.Count; i++)
            {
                if (exit)
                    return;

                var destination = comparableImages[i];
                var similarity = fileImage.CalculateSimilarity(destination);
                var sim = new SimilarityImages(fileImage, destination, similarity);
                similarityImagesSorted.Add(sim);
                index++;
            }

            similarityImagesSorted.Sort();
            similarityImagesSorted.Reverse();
            similarityImages = new BindingList<SimilarityImages>(similarityImagesSorted);

            var buttons =
                new List<Button>
                    {
                        ScanBT
                    };

            if (similarityImages[0].Similarity > 70)
            {
                con = new System.Data.SqlClient.SqlConnection();
                con.ConnectionString = "Data Source=SHEN-PC\\SQLEXPRESS;Initial Catalog=CharacterImage;Integrated Security=True";
                con.Open();

                String getFile = "SELECT ImageName, Character FROM CharacterImage WHERE ImageName='" + similarityImages[0].Destination.ToString() + "'";
                SqlCommand cmd2 = new SqlCommand(getFile, con);
                SqlDataReader rd2 = cmd2.ExecuteReader();

                while (rd2.Read())
                {
                    for (int i = 0; i < 1; i++)
                    {
                        string getText = rd2["Character"].ToString();
                        Action showText = () => ocrTB.AppendText(getText);
                        ocrTB.Invoke(showText);
                    }
                }
                con.Close();
            }
            else
            {
                MessageBox.Show("No character found!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


        }

Ответы [ 3 ]

1 голос
/ 11 апреля 2011
  • Запустите код внутри метода ProcessImages2 в BackgroundWorker.DoWork (...)
  • Замена ProcessImagesDelegate.BeginInvoke (файлы, ноль, ноль) с worker.RunWorkerAsync (...)
  • Перехватить событие RunWorkerCompleted и выполнить там File.Delete (...) .

Таким образом, ваш основной поток может обновляться и использоваться конечным пользователем.

1 голос
/ 11 апреля 2011

Как насчет перемещения строки кода для удаления файла в конец метода изображений процесса?

0 голосов
/ 11 апреля 2011

Если вы отредактируете метод, как показано ниже, вызов будет заблокирован, пока ProcessImages2 не будет завершен.

var processImagesDelegate = new ProcessImagesDelegate(ProcessImages2);  
IAsyncResult result = processImagesDelegate.BeginInvoke(files, null, null);
result.AsyncWaitHandle.WaitOne();
**//HERE IS THE LINE OF CODE THAT NEED TO BE RUN AFTER EVERYTHING FINISH RUN   
System.IO.File.Delete(@"C:\Users\Shen\Desktop\LenzOCR\TempFolder\tempPic.jpg");  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...