林有一点麻烦,在我的列表框中显示的列表。 当我在一堂课中学到了所有东西的时候,事情似乎很顺利,但我无法弄清楚它为什么现在不起作用。当我点击扫描按钮时,我的应用程序会转到另一个类,其中有一个新线程用于扫描可用的蓝牙设备,并创建一个包含这些设备的列表。一旦列表传递回Form1类中的方法,它不会更新列表框。在调试模式下,我可以看到列表中有项目,但列表框中没有任何内容。如果我通过扫描按钮单击方法执行listBox1.Items.Add(“Hello World”),列表框将显示项目。我有点卡在这里。我刚开始学习C#,如果有人能帮助我,将不胜感激。无法填充列表框
public partial class Form1 : Form
{
int PanelWidth;
bool PanelCalShow;
public Form1()
{
InitializeComponent();
PanelWidth = PanelCal.Width;
PanelCalShow = false;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (PanelCalShow)
{
PanelCal.Width = PanelCal.Width + 10;
if (PanelCal.Width >= PanelWidth)
{
timer1.Stop();
PanelCalShow = false;
this.Refresh();
}
}
else
{
if (PanelCalShow != true)
{
PanelCal.Width = PanelCal.Width - 10;
if (PanelCal.Width <= 0)
{
timer1.Stop();
PanelCalShow = true;
this.Refresh();
}
}
}
}
// Bluetooth connection
private void BtnScan_Click(object sender, EventArgs e)
{
var instance = new BtCom();
instance.Scan();
}
public void LbClientUpdate(List<string> DiscoveredDevices)
{
listBox1.DataSource = DiscoveredDevices;
}
}
和蓝牙连接类
public class BtCom
{
public List<string> DiscoveredDevices = new List<string>();
Guid mUUID = new Guid("00001101-0000-1000-8000-00805F9B34FB");
public void Scan()
{
Thread bluetoothScanThread = new Thread(new ThreadStart(Scanning));
bluetoothScanThread.Start();
}
BluetoothDeviceInfo[] devices;
public void Scanning()
{
var form1 = new Form1();
BluetoothClient client = new BluetoothClient();
devices = client.DiscoverDevicesInRange();
foreach (BluetoothDeviceInfo d in devices)
{
DiscoveredDevices.Add(d.DeviceName);
}
form1.LbClientUpdate(DiscoveredDevices);
}
}
您有一个函数'LbClientUpdate'来设置ListBox的DataSource,但它不会从任何地方调用。 – James
原因是你没有看到原始表单上的任何更新,因为你正在BtCom类中创建一个'Form1'类的新实例,而不是使用原始实例。 –
嗨,对不起。我正在删除评论,并且必须删除评论。在listBox1.DataSource之后,我有一个带有“hello world”的消息框,它弹出时应该像它应该但没有在列表框中。难道是因为该方法是从一个不同的线程调用的,它也在该线程中执行,而据我所知,listbox应该在其原始线程内编辑? – Rikas