线程c#停止执行程序,而不使用线程使程序继续运行

本文关键字:线程 程序 运行 继续 执行程序 | 更新日期: 2023-09-27 18:13:38

我在c#中使用-first - time- threads -with多参数。我的问题是:

如果我使用函数-我将发布它-没有威胁,它将遵循程序的自然逻辑。然而,我需要使用线程来同时调用函数的多个实例。但是当我使用线程时,程序的执行停止,尽管我知道线程正在正确地调用函数,因为我短暂地看到它 -它弹出一个Windows窗体!然后打印一些我输入的消息-

我不知道为什么,是相对简单的函数。我认为它可能是与EventArgs的东西,但不确定-我也把它作为参数传递!

让我们看看线程和函数:

 //This is the function that I call in the threads
 public void device(object i, object s, object f)
 {
     int j = (int)i;
     EventArgs g = (EventArgs)f;
      //Connect the devices
      BSSDK.BS_SetDeviceID(m_ConnectedDeviceHandle[j],
          m_ConnectedDeviceID[j], m_ConnectedDeviceType[j]);
      UserManagement userTest = new UserManagement();
      userTest.SetDevice(m_ConnectedDeviceHandle[j],
          m_ConnectedDeviceID[j], m_ConnectedDeviceType[j]);
      //Open a windows form and show the interface!
      userTest.Show();
    }

   // The function with the threads
   private void userTest_Click(object sender, EventArgs e)
   {
        ...
        //This loop if for testing, the actual value will be other.
        for (int i = 0; i < 2; i++)
        {
            //Notice that I´m sending 3 parameters!
            Thread t = new Thread(unused => device(i, sender, e));
            try
            {
                t.Start();
            }
            catch (ThreadStateException f)
            {
                MessageBox.Show("ERROR:" + f);  
            }
         }
       }

谢谢。

线程c#停止执行程序,而不使用线程使程序继续运行

当线程结束时,表单将超出作用域。你需要做一些事情来保持对它的引用是有效的。

与来自不同线程的控件交互通常也是一个坏主意。尝试从创建控件的线程以外的线程访问控件可能会导致跨线程异常。您必须调用Invoke或BeginInvoke来将调用封送到正确的线程。

如果这是你第一次查看线程,我建议你停在这里,看看别的东西!:)首先,您在这里尝试做的是新的Async库(http://msdn.microsoft.com/en-us/vstudio/gg316360)的完美候选。请注意,虽然它是CTP,但MS确实支持使用它的配置。

如果你真的需要使用类似线程所提供的东西,你可以使用任务并行库。你可以把任务看作是轻量级线程。

今天我唯一会使用线程的情况是当我有一个长时间运行的操作,我需要完全控制。

最诚挚的问候,

Tibi

少数