我试图用C#编写一个简单的多线程程序.它有一个按钮按下,在窗体上创建一个新标签,然后一个for循环运行显示标签中的循环值.因此,如果您按下按钮3次,它将创建3个线程,在带有循环的表单上有3个标签.
当我按下按钮一次,它工作正常.但是当我不止一次按它来创建更多标签时,它会遇到以下问题:
一旦多次按下按钮,它就会在前一个线程中停止循环并运行新线程的循环.如果它是多线程的,那么它不应该停止第一次循环.
当第二个标签的循环结束时,它会产生以下错误
你调用的对象是空的
这是我的完整代码.抛出错误的行最后是"mylabel [tcount] .Text = i.ToString();".
程序截图:http://i.imgur.com/IFMIs.png
代码截图http://i.imgur.com/sIXtc.png
namespace WindowsFormsApplication2{
public partial class Form1 : Form{
public Form1(){
InitializeComponent();
}
private int tcount = 0;
private int y_point = 0;
Thread[] threads = new Thread[5];
Label[] mylabel = new Label[5];
private void button1_Click(object sender, EventArgs e){
threads[tcount] = new Thread(new ThreadStart(work));
threads[tcount].Start();
}
private void work(){
if (this.InvokeRequired){
this.Invoke(new MethodInvoker(delegate{
mylabel[tcount] = new Label();
mylabel[tcount].Text = "label" + tcount;
mylabel[tcount].Location = new …Run Code Online (Sandbox Code Playgroud) 如果我在C#中运行以下代码,那么它运行正常
UInt32 a
a = 0x9E3779B9
Run Code Online (Sandbox Code Playgroud)
但是当我在VB.Net中运行相同的代码时,它会给我错误"常量表达式在'UInteger'类型中无法表示"
Dim a As UInt32
a = &H9E3779B9
Run Code Online (Sandbox Code Playgroud) 假设我有一个定时器控件,间隔设置为20ms.在这个控件里面,我正在做一些需要100ms才能完成的操作.所以一旦它进行了那个操作,Timer控制器会再次执行而不等待该操作完成吗?或者直到该操作没有完成,Timer才会再次执行?
编辑
我在控制台应用程序的一个单独的线程中使用System.Timers.Timer().我在下面与安德鲁讨论后编辑了我的问题.
我试图在以下位置创建一个注册表项,但我得到访问被拒绝错误:
HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany的\ MyProgram
这是代码:
RegistryKey reg;
reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\MyCompany\MyProgram");
Run Code Online (Sandbox Code Playgroud) 我有一个DLL,我已经包含在我的C#项目中.我们称之为"one.dll"这个DLL包含一个名为"staticclass"的静态类
我有另一个DLL,我也包含在同一个项目中.我们称之为"two.dll"这个DLL还包含一个名为"staticclass"的静态类
现在当我在我的项目中同时包含两个DLL并尝试访问"staticclass"时,自然它会给出错误.有没有办法我可以更改类的名称或给它一些别名,所以让我们说"one.dll"中的"staticclass"将保持原样,我可以给"staticclassTwo"别名,这是"两个" .DLL"
请注意我无法访问"one.dll"和"two.dll"的源编解码器