C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: スレッド作成


(過去ログ 16 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■6078 / inTopicNo.1)  スレッド作成
  
□投稿者/ れれれ (31回)-(2007/07/31(Tue) 17:36:48)

分類:[C#] 

お世話になっていますれれれです。

早速質問なんですが
メインスレッドで作ったリストビューに別スレッドからアイテムを加える
ということを今やろうとしています。

そして以下のように作りました

Thread listviewThread = null;
private delegate int AddIdDelegate(ListViewItem id);

private void StartTxThread()//フォーム上に組み込んだボタンを押したらこの関数に飛びます
{
   if (listviewThread == null)
   {
   listviewThread = new Thread(new ThreadStart(ListViewIdWorker));
             //コンパイルエラーエラー:デリゲート 'System.Threading.ThreadStart' に一致する 'ListViewIdWorker' のオーバーロードはありません

  listviewThread.Start();

  }

}
void ReadIdWorker()
{//中略
   if(!containFlag)//データが送られてきたら
   {
   AddIdDelegate dlg = new AddIdDelegate(ListViewIdWorker);
   IAsyncResult ar = this.BeginInvoke(dlg, new object[] {item});
   }
}
private int ListViewIdWorker(ListViewItem item)
{
   listViewId.Items.Add(item);
  return listViewId.Items.Count;
}
listviewThreadとは異なるスレッドで動かしたメソッド(ReadIdWorker)から得たデータをlistviewThreadでリストビューに加えたいのです。
http://codezine.jp/a/article.aspx?aid=139
を参考にして書いてみました
どうすればエラーを解消できるでしょうか?
よろしくおねがいします。
引用返信 編集キー/
■6079 / inTopicNo.2)  Re[1]: スレッド作成
□投稿者/ れれれ (33回)-(2007/07/31(Tue) 17:58:19)
申し訳ありません
自己解決できそうなので、ひとまず終了とさせていただきます。

もし解決できなければまた投稿させていただきます
解決済み
引用返信 編集キー/
■6081 / inTopicNo.3)  Re[1]: スレッド作成
□投稿者/ Hongliang (158回)-(2007/07/31(Tue) 18:04:11)
Hongliang さんの Web サイト
2007/07/31(Tue) 18:04:50 編集(投稿者)

そもそも
> メインスレッドで作ったリストビューに別スレッドからアイテムを加える
これが無理です。
コントロールとスレッド辺りのキーワードで調べれば色々見つかるでしょう。解決策も。

コンパイラ エラー CS0123 は、ヘルプに書いてある通りのことが原因ですが、ヘルプの文言のどこが分かりませんか?

// ぬお、ちょっと遅かったか。
引用返信 編集キー/
■6087 / inTopicNo.4)  Re[2]: スレッド作成
□投稿者/ れれれ (34回)-(2007/07/31(Tue) 18:39:07)
2007/07/31(Tue) 18:42:33 編集(投稿者)
2007/07/31(Tue) 18:40:43 編集(投稿者)

No6081 (Hongliang さん) に返信
Delegate,Invokeあたりを使えば出来ると思ったのですが。。。

ちょっと書き換えてみました
Thread listviewThread = null;
private delegate int AddIdDelegate(ListViewItem item);

void ReadIdWorker()
{//中略
int count = rfidDatas.Length;
for(int i = 0; i < count; i++)
{
ListViewItem item = new ListViewItem(rfidDatas[i].id.ToString());
   if(!containFlag)//リストビューに表示されているデータと異なるデータが送られてきたら
   {  
    if (listviewThread == null)
     {
     listviewThread = new Thread(new ThreadStart(ListViewIdWorker));
     listviewThread.Start();

   }
   }
}
}
private void ListViewIdWorker()
{
   AddIdDelegate dlg = new AddIdDelegate(ListViewIdWorker);
   IAsyncResult ar = this.BeginInvoke(dlg, new object[] {item});//コンパイルエラー itemは現在のコンテキストにありません
}
private int ListViewIdWorkers(ListViewItem item)
{
   listViewId.Items.Add(item);
  return listViewId.Items.Count;
}
メインスレッドで作ったリストビューに別スレッドから得たデータを書き込みたいです。

forループで送られてきた複数データとリストビューに表示されているデータとを比べ、異なるデータがあったらリストビューに表示させます。
itemはListviewItem型としてListViewIdWorker,ListViewIdWorkersに使いたいのですがどうやれば別のメソッドでも使うことが出来るのでしょうか?
よろしくお願いします。
引用返信 編集キー/
■6097 / inTopicNo.5)  Re[2]: スレッド作成
□投稿者/ mあ (35回)-(2007/08/01(Wed) 02:07:28)
2007/08/01(Wed) 10:06:28 編集(投稿者)

自重して削除
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -