あるスレッドから別のスレッドにロードされたデータを渡してフォームにデータを追加する際に問題があります。私は別のオブジェクトを "var obj = new object [] {names}"に追加し、 "Parameter count mismatch"を取得しました。私はまだ最初の1つの "UpdateFormMethod()"に2番目のスレッドの "LoadData()"から "Clients"と "Messages"を渡すことを好むでしょうが、私はそれをどうするか考えていません。誰かが私にこの問題を手伝ってもらえれば幸いです。ここで複数のオブジェクトをスレッド間で送信するにはC言語のinvokeを使用します。#
1つのクラス内のコードの重要な部分です:
private readonly Thread _thread;
public readonly Loader Loader = new Loader();
public Dictionary<string, Client> Clients;
public Dictionary<string, Message> Messages;
private bool _stopData = false;
public delegate void UpdateForm(object data);
public UpdateForm MyDelegate;
public Fcon() {
InitializeComponent();
MyDelegate = new UpdateForm(UpdateFormMethod);
_thread = new Thread(LoadData);
_thread.Start();
}
public void UpdateFormMethod(object data) {
foreach (var str in ((IEnumerable<string>)data).Where(str => !fcon_container_users_list.Items.Contains(str))) {
fcon_container_users_list.Items.Insert(0, str);
}
}
public void LoadData() {
while (!_stopData) {
Clients = Loader.GetClients(Operator);
Messages = Loader.GetMessages(Operator);
var status = Loader.SetStatus(Operator);
var names = new string[Clients.Count];
var x = 0;
foreach (var kvp in Clients) {
names[x] = "user_" + kvp.Value.id_fcon_client;
x++;
}
var obj = new object[] { names };
this.Invoke(this.MyDelegate, obj);
Thread.Sleep(1000);
}
}
public void StopData() {
_stopData = true;
}
あなたの質問についてもっと明示してください。 (1) "他のオブジェクトを追加する"ためにあなたは正確に何をしましたか? (2)「私はまだ好きです...」とは、「私の質問はどうすればいいですか」という意味ですか、それとも実際の質問ですか? –