除非我关闭我的表单,否则我的代码不会运行,但是我需要打开我的表单,因为我想显示来自其他代码的信息

Posted

技术标签:

【中文标题】除非我关闭我的表单,否则我的代码不会运行,但是我需要打开我的表单,因为我想显示来自其他代码的信息【英文标题】:My code won't run unless I close my form, however I need my form to be open as I want to display information from other code 【发布时间】:2022-01-14 07:16:06 【问题描述】:

我有两个单独的文件,Form1.cs 和 Program.cs。我希望 Program.cs 在我通过按 button1 并选择文件目标在我的表单中选择一个文件路径后开始运行,但是它只有在我关闭表单后才开始运行。当表单仍然打开时,我无法运行我的 program.cs,但是我想在表单上显示从 program.cs 获得的信息。 这是我的表单代码的样子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Diagnostics;

namespace test

    public partial class Form1 : Form
    
        public string Pathh;
        public Form1()
        
            InitializeComponent();

        

        public void button1_Click(object sender, EventArgs e)
        
            OpenFileDialog openFileDialog1 = new OpenFileDialog
            
                InitialDirectory = @"D:\",
                Title = "Browse Text Files",

                CheckFileExists = true,
                CheckPathExists = true,

                DefaultExt = "csv",
                Filter = "csv files (*.csv)|*.csv",
                FilterIndex = 2,
                RestoreDirectory = true,

                ReadOnlyChecked = true,
                ShowReadOnly = true
            ;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            
                textBox1.Text = openFileDialog1.FileName;

            
        
    





这是我在 Program.cs 中的主要内容:


namespace test

    class Program
    
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        
            Form1 form = new Form1();
            form.ShowDialog();
            if (form.checkBox1.Checked)
            
                Console.Write("LOL");
                Dictionary<string, string> LocatieProduct = new Dictionary<string, string>();
                Dictionary<string, int> PickCountSchap = new Dictionary<string, int>();
                /*for (int i = 0; i <= 17; i++)
                


                    StringBuilder sb = new StringBuilder();
                    if (i < 10)
                        sb.Append("D0" + i);
                    else
                        sb.Append("D" + i);
                    string final = sb.ToString();
                    Console.WriteLine(final);
                    PickCountGang[final] = 1;
                
                */
                Dictionary<string, int> PickCount = new Dictionary<string, int>();
                string path = form.textBox1.Text;


                var textBoxes = new List<Control>();
                foreach (Control c in form.Controls)
                
                    if (c is TextBox)
                    
                        textBoxes.Add(c);
                    
                
                using (var reader = new StreamReader(@path))
                
                    int count = 0;
                    while (!reader.EndOfStream)
                    
                        count++;


                        var line = reader.ReadLine().Split(';');

                        string TypeOmschrijving = line[11]; //Pick/Bulk
                        string Locatie = line[20]; //DXXXXXXXXX (locatie in mag)
                        string Omschrijving = line[15]; //welk product
                        string Soort = line[9]; //DROOG of VRIES of KOEL

                        if (Soort == "DROOG" && TypeOmschrijving != null && TypeOmschrijving != "Bulk" && Locatie != "retd" && Locatie != "" && Locatie != "RET.LEV.D")
                        
                            //Console.Write(Soort + " " + TypeOmschrijving + " " + Omschrijving + " "  + Locatie + "\t");
                            string ParsedLocatie = LocatieParser(Locatie);
                            bool test1 = LocatieProduct.TryGetValue(ParsedLocatie, out string value2);
                            if (test1 == false)
                             LocatieProduct.Add(ParsedLocatie, Omschrijving); 


                            bool test2 = PickCount.TryGetValue(Locatie, out int value);
                            if (test2 == false)
                             PickCount.Add(Locatie, 1); 
                            else PickCount[Locatie]++;

                        
                    
                    foreach (var element in PickCount) //per schap
                    

                        string trimmedResult = LocatieParser(element.Key);
                        //Console.Write('"' + trimmedResult + '"' + ", ");

                        bool test2 = PickCountSchap.TryGetValue(trimmedResult, out int value);
                        if (test2 == false)
                         PickCountSchap.Add(trimmedResult, element.Value); 
                        else PickCountSchap[trimmedResult] += element.Value;
                    
                    foreach (var element in PickCountSchap) //per schap
                    
                        // Console.WriteLine(element.Key + " " + element.Value);
                        string result = "";
                        int i = 0;
                        char[] key = element.Key.ToCharArray();
                        foreach (char c in key)

                        
                            if (i == 2)
                             result = result + "."; 
                            result = result + c;
                            i++;
                        
                        // Console.WriteLine(element.Value);
                    
                    foreach (var element in LocatieProduct) //per schap
                    
                        // Console.WriteLine(element.Key + " " + element.Value);
                    
                    var Array = MagazijnCreator(PickCountSchap, LocatieProduct);


                    for (int y = 0; y < 70; y++)
                    
                        Console.WriteLine();
                        for (int x = 0; x < 24; x++)
                        
                            bool test2 = PickCountSchap.TryGetValue(Array[y, x].Locatie, out int value);
                            if (test2 == false)
                             PickCountSchap.Add(Array[y, x].Locatie, 0); 
                            else if (Array[y, x].Locatie == "08.38")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.1", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.38"] + test;
                            
                            else if (Array[y, x].Locatie == "08.40")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.2", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.40"] + test;
                            
                            else if (Array[y, x].Locatie == "08.42")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.3", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.42"] + test;
                            
                            else if (Array[y, x].Locatie == "08.44")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.44", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.44"] + test;
                            
                            else if (Array[y, x].Locatie == "08.46")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.5", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.46"] + test;
                            
                            else if (Array[y, x].Locatie == "08.43")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.7", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.43"] + test;
                            
                            else if (Array[y, x].Locatie == "08.45")
                            
                                bool Test3 = PickCountSchap.TryGetValue("17.6", out int test);
                                if (Test3)
                                    Array[y, x].PickCount = PickCountSchap["08.45"] + test;
                            
                            else Array[y, x].PickCount = PickCountSchap[Array[y, x].Locatie];



                            string Count = (Array[y, x].PickCount + " ");
                            if (Count.Length < 5)
                            
                                while (Count.Length < 4)
                                
                                    Count += ' ';

                                
                            
                            Console.Write(Count);
                        
                    
                    int it = 1;
                    foreach (var obj in Array)
                    
                        if (obj.Locatie != "PAD  ")
                         textBoxes[it].Text = obj.Locatie; 
                    
                    Console.ReadLine();
                
            
        

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

为了使表单处于活动状态并同时运行其他代码,您可以使用线程。 添加到您的代码using system.threading 将要在表单后面运行的代码包装在一个新线程中,如下所示 var t = new thread(()=&gt; //CODE ) 然后启动新线程。 t.start();

如果您想在另一个线程中更改表单中的某些内容,则需要像这样使用方法调用程序 this.invoke((methodInvoker)(()=&gt; this.background.color = colors.red; ))

PS:您可能希望将您的应用程序更改为 Windows 窗体应用程序并从主 winform 运行所有内容。 更多信息请查看here

【讨论】:

以上是关于除非我关闭我的表单,否则我的代码不会运行,但是我需要打开我的表单,因为我想显示来自其他代码的信息的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 除非我关闭优化,否则发布构建崩溃

除非我滚动,否则页脚不会显示在 TableView 上

除非在 vuejs2 中通过热重载更改代码,否则 firebase 存储不会运行

在OpenGL中,除非我再次重新指定顶点属性,否则为啥我的缓冲区对象不会绘制?

Python,Discord bot 未回复消息且终端未更新

除非之前按下,否则按下运行按钮不会提高速度