Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的statthread和进程输出捕获#_C#_Multithreading_Serial Port - Fatal编程技术网

C# c语言中的statthread和进程输出捕获#

C# c语言中的statthread和进程输出捕获#,c#,multithreading,serial-port,C#,Multithreading,Serial Port,这是我遇到的一个奇怪的问题。我有一个用c语言编写的窗口应用程序来做测试。它有一个MDI父窗体,该窗体承载一些子窗体。其中一个表单通过创建流程来启动测试脚本,并将脚本输出捕获到文本框中。另一种形式是打开串行端口,监视我正在使用的设备的状态(如外壳)。如果我同时运行这两个脚本,脚本的输出似乎只有在测试完成后才会显示在文本框中。但是,如果我不打开串口表单,脚本的输出将被实时捕获 有人知道是什么导致了问题吗?我注意到串行端口表单的onDataReceived事件处理程序有一个[StatThread]头。

这是我遇到的一个奇怪的问题。我有一个用c语言编写的窗口应用程序来做测试。它有一个MDI父窗体,该窗体承载一些子窗体。其中一个表单通过创建流程来启动测试脚本,并将脚本输出捕获到文本框中。另一种形式是打开串行端口,监视我正在使用的设备的状态(如外壳)。如果我同时运行这两个脚本,脚本的输出似乎只有在测试完成后才会显示在文本框中。但是,如果我不打开串口表单,脚本的输出将被实时捕获

有人知道是什么导致了问题吗?我注意到串行端口表单的onDataReceived事件处理程序有一个[StatThread]头。这会导致串行端口线程比其他进程具有更高的优先级吗


提前感谢。

我不知道任何情况下
[STAThread]
属性会导致线程具有更高的优先级

下面讨论STA和MTA线程之间的区别:

COM线程模型称为 “公寓”模式,在哪里执行 初始化的COM对象的上下文是 与单个线程关联 (单线程单元)或多线程单元 线程(多线程单元)。在里面 这个模型是一个COM对象 在公寓中初始化,是一部分 在 这是运行时

STA模型用于COM对象 这不是线程安全的。这意味着 他们不能自己处理 同步。这是一个常见的用法 是一个UI组件。那么如果另一个 线程需要与 对象(例如按 表单)然后消息被封送 在STA线程上。窗口窗体 信息泵系统就是一个例子 这个

如果COM对象可以处理自己的 同步然后MTA模型可以 可以在多线程的情况下使用 允许与对象交互 没有编组的呼叫


我不知道有哪种情况下
[STAThread]
属性会导致线程具有更高的优先级

下面讨论STA和MTA线程之间的区别:

COM线程模型称为 “公寓”模式,在哪里执行 初始化的COM对象的上下文是 与单个线程关联 (单线程单元)或多线程单元 线程(多线程单元)。在里面 这个模型是一个COM对象 在公寓中初始化,是一部分 在 这是运行时

STA模型用于COM对象 这不是线程安全的。这意味着 他们不能自己处理 同步。这是一个常见的用法 是一个UI组件。那么如果另一个 线程需要与 对象(例如按 表单)然后消息被封送 在STA线程上。窗口窗体 信息泵系统就是一个例子 这个

如果COM对象可以处理自己的 同步然后MTA模型可以 可以在多线程的情况下使用 允许与对象交互 没有编组的呼叫


对于UI线程,STATHREAD是必需的。从MSDN:

指示应用程序的COM线程模型为单线程单元(STA)


此外,windows窗体应用程序将只有一个UI线程。听起来你需要做的是使用后台工作线程来控制脚本的运行,并让它将更改传递回UI线程。UI线程需要STATHREAD。从MSDN:

指示应用程序的COM线程模型为单线程单元(STA)


此外,windows窗体应用程序将只有一个UI线程。听起来你需要做的是使用后台工作线程来控制脚本的运行,并让它将更改反馈给用户界面线程。

SAT?脚本?[SAThread]?请编辑您的帖子,使您的问题清晰易懂。SAT?脚本?[SAThread]?请编辑您的帖子,使您的问题清晰易读。+1听起来问题好像是UI线程被阻塞了。我使用委托函数方法在我的窗口窗体中更新UI。在我用串口表单运行它们之前,它一直在工作。有没有办法使用VisualStudio提供的调试器查看发生了什么?我想知道,如果打开串口表单,为什么UI线程会被阻塞。+1听起来问题确实是UI线程被阻塞了。我使用委托函数方法在我的窗口表单中更新UI。在我用串口表单运行它们之前,它一直在工作。有没有办法使用VisualStudio提供的调试器查看发生了什么?我想知道,如果串口表单被打开,为什么UI线程会被阻塞。