【发布时间】:2021-04-02 14:03:07
【问题描述】:
我在 c# 中遇到了 backgroundworker 的问题。 我正在编写一个 dll 文件。
这是我在 VS 2019 中的类库 (.NET Framework) 类型项目中的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace States
{
public class ST
{
public static void Read()
{
BackgroundWorker bgwMessage = new BackgroundWorker();
bgwMessage.DoWork += new DoWorkEventHandler(BgwFileOpen_DoWork);
bgwMessage.RunWorkerAsync();
}
private static void BgwFileOpen_DoWork(object sender, DoWorkEventArgs e)
{
MessageBox.Show("Ran");
}
}
}
当我使用 立即 窗口调用 Read() 方法时,后台工作人员的 DoWork 方法中的命令不会运行。逐行调试问题表明Read() 方法正在运行,但它没有以某种方式调用 RunworkerAsync。
*更新1: 启动线程也不起作用:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TradeStates
{
public class ST
{
public static void Read()
{
Thread thr = new Thread(new ThreadStart(MSGshow));
thr.Start();
}
public static void MSGshow()
{
MessageBox.Show("Ran");
}
}
}
【问题讨论】:
-
由于 BackgroundWorker 类是 IDisposable,请考虑将其声明移动到一个字段中,然后在工作人员完成后将其处理掉。
-
嗯,“即时窗口”。即时窗口总是能够显示消息框吗?假设您在调试过程中正在立即窗口中执行命令,请尝试将“MessageBox.Show("Ran")”替换为“Debug.WriteLine("Ran")”并查看输出是否显示在调试中输出窗口的类别。
-
@Julius 如果我将消息框放在“读取”方法中,它将被执行。我试过“Debug.WriteLine”它也没有执行。
标签: c# backgroundworker