【发布时间】:2020-07-12 20:00:16
【问题描述】:
internal static class RtfMerger
{
static object lockRtf = new object();
static RichTextBox richTextBox1 = new RichTextBox();
static TaskCompletionSource<string> source = new TaskCompletionSource<string>();
static Thread thread = new Thread(() =>
{
//SOME code...
// HOW TO THERE ACCESS TO THE PARAMETER input ?
});
public static Task<string> MergeRtf(params string[] input)
{
lock (lockRtf)
{
thread.SetApartmentState(ApartmentState.STA);
thread.Start(); // <- HERE I CAN PASS input
return source.Task;
}
}
您好,如何修改线程的声明,使其可以接收参数字符串[]输入?
并且有完整的类和相关的方法。希望能帮助到你 因为我担心了很久不知道怎么办 因为我担心了很久,不知道该怎么办
{
internal static class RtfMerger
{
static object lockRtf = new object();
static RichTextBox richTextBox1 = new RichTextBox();
static TaskCompletionSource<string> source = new TaskCompletionSource<string>();
static Thread thread = new Thread(() =>
{
try
{
//var richTextBox1 = new RichTextBox(); //TODO static na úrovni třídy [LOCK] //TODO async
if (input != null && input.Length > 0)
{
if (input[0].StartsWith(@"{\rtf"))
{
richTextBox1.Rtf = input[0];
}
else
{
richTextBox1.Rtf = ConvertPlainTextToRTF(input[0], "Arial");
}
richTextBox1.AppendText("\r\n");
for (int i = 1; i < input.Length; i++)
{
richTextBox1.SelectionStart = richTextBox1.TextLength;
richTextBox1.SelectionLength = 0;
if (input[i].StartsWith(@"{\rtf"))
{
richTextBox1.SelectedRtf = input[i];
}
else
{
richTextBox1.SelectedRtf = ConvertPlainTextToRTF(input[i], "Arial");
}
}
}
source.SetResult(richTextBox1.Rtf);
}
catch (Exception ex)
{
source.SetException(ex);
}
});
public static Task<string> MergeRtf(params string[] input)
{
lock (lockRtf)
{
//TODO přidat synchronizační objekt (může být
thread.SetApartmentState(ApartmentState.STA);
thread.Start(); //Přidat zámek k spuštění threadu
return source.Task;
}
}
}
}
【问题讨论】:
-
有没有办法,如何在不创建其他方法的情况下做到这一点?
-
静态线程 thread = new Thread(() => { //CODE });在这种类型的注册中
-
"如何在不创建其他方法的情况下做到这一点?" -- stackoverflow.com/a/3360586
标签: c# multithreading