C# 访问线程参数
您好,如何修改线程的声明,即它可以接收参数字符串[]输入 并且有一个完整的类和相关的方法。希望能有帮助 因为我已经担心很长时间了,我不知道该怎么办 因为我已经担心很长时间了,我不知道该怎么办C# 访问线程参数,c#,multithreading,C#,Multithreading,您好,如何修改线程的声明,即它可以接收参数字符串[]输入 并且有一个完整的类和相关的方法。希望能有帮助 因为我已经担心很长时间了,我不知道该怎么办 因为我已经担心很长时间了,我不知道该怎么办 internal static class RtfMerger { static object lockRtf = new object(); static RichTextBox richTextBox1 = new RichTextBox();
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;
}
}
}
}
另请参见是否有一种方法,如何在不创建另一个方法的情况下执行此操作?静态线程线程=新线程=>{//CODE};在这种类型的注册中,如何在不创建其他方法的情况下执行此操作?-我无法使用静态RichTextBox RichTextBox 1=新的RichTextBox;获取异常,我需要在中声明为静态class@SonDy-当然,那就别用了。您提供的代码中不需要它,您在问题中也没有提到它,所以我将其忽略。@SonDy-而且,即使您使用了RichTextBox,您也不能在创建它的线程之外的线程中访问或更新它。@SonDy-您需要让我们知道//一些代码。。。他正在努力。
internal static class RtfMerger
{
static object lockRtf = new object();
static TaskCompletionSource<string> source = new TaskCompletionSource<string>();
public static Task<string> MergeRtf(params string[] input)
{
lock (lockRtf)
{
Thread thread = new Thread(() =>
{
//SOME code...
// You can access `input` here.
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
return source.Task;
}
}
}