林有一點麻煩,在我的列表框中顯示的列表。 當我在一堂課中學到了所有東西的時候,事情似乎很順利,但我無法弄清楚它爲什麼現在不起作用。當我點擊掃描按鈕時,我的應用程序會轉到另一個類,其中有一個新線程用於掃描可用的藍牙設備,並創建一個包含這些設備的列表。一旦列表傳遞迴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