1)UIスレッドを制御する呼び出しを呼び出すことができます。もちろん、オブジェクトの配列をパラメータとして渡すことができます。しかし、パラメータを間違った場所に置くのは本当に簡単です。私は、代わりに匿名の代理人を使う方が良いと思います。 コントロールから値を返す場合と同じことです。代理署名で返される値の型を指定するだけで済みます。
public string ExcludedFileType
{
get
{
if (InvokeRequired)
return (string)Invoke((Func<string>)delegate { return ExcludedFileType; });
return (string)listBox1.SelectedItem;
}
set
{
if (InvokeRequired)
{
Invoke((MethodInvoker)delegate { ExcludedFileType = value; });
return;
}
listBox1.SelectedItem = value;
}
}
ワーカースレッドから使用法:
ExcludedFileType = "jpg";
MessageBox.Show(ExcludedFileType);
2)スレッドを起動するときには、パラメータを提供することができます。
private void DoSomething(object state)
{
IList<string> excluedeFileTypes = (IList<string>)state;
foreach(string fileType in excluedeFileTypes)
if (currentFiles[currentFileLoc].EndsWith(fileType))
doNotCompare = true;
}
private IList<string> ExcludedFileTypes
{
get
{
List<string> filteTypes = new List<string>();
foreach (var item in listBox1.SelectedItems)
filteTypes.Add(item.ToString());
return filteTypes;
}
}
3)あなたは、例えばAOPを使用することができます。
// start async operation
ThreadPool.QueueUserWorkItem(DoSomething, ExcludedFileTypes);
だから、あなたは、ワーカースレッドからのコントロールにアクセスする必要がありません。 PostSharpは自動的にスレッドディスパッチを実装します。
ありがとう、Proteanですが、私は戻り値をブール値にする必要があり、それが私が苦労しているところです。 – lappy