让我们说我想创建一种新的编程语言或者使用MS不支持的某种语言(Haskell,Java ......等等),但希望能够对Windows 8 metro/winRT进行编码.
我知道Metro UI中的所有应用都是沙盒.
我知道我可以用原生C++编程,所以我假设我也可以在C或汇编中完成.
但:
jit programming-languages microsoft-metro windows-8 windows-runtime
我知道当你通过调用BeginInvoke()或ThreadPool.QueueUserWorkItem(...)并行运行某个方法时,.NET框架正在捕获包含代码访问安全信息和其他一些东西的ExecutionContext对象.
我想要的是在ExecutionContext中包含我的并行方法所需的一些数据,但也必须在排队任务时捕获.
问题是我并不总是能控制创建此并行任务的代码,所以我必须找到一种方法来存储这些数据,然后再调用这个外部代码.这就是为什么我想到ExecutionContext类.
当我并不总是控制在线程之间分割工作的代码时,有没有办法将某个状态传递给并行任务.
我有以下测试程序
char c = '§';
Debug.WriteLine("c: " + (int)c);
byte b = Encoding.GetEncoding(437).GetBytes("§")[0];
Debug.WriteLine("b: " + b);
char c1 = Encoding.GetEncoding(437).GetString(new byte[] { 21 })[0];
Debug.WriteLine("c1: " + (int)c1);
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:
c: 167
b: 21
c1: 21
Run Code Online (Sandbox Code Playgroud)
正如我在这里看到的那样GetBytes
在unicode中工作正常167 =在CP437中> 21
但是在CP437中GetString不工作
21 =在unicode中> 21
这是一个错误还是我的错误?
我有以下测试
[Test]
public void aaa()
{
CallContext.LogicalSetData("aa", "1");
Action parallelMethod = () => CallContext.LogicalSetData("aa", "2");
var r = parallelMethod.BeginInvoke(null, null);
parallelMethod.EndInvoke(r);
Assert.That(CallContext.LogicalGetData("aa"), Is.EqualTo("1"));
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么这个测试在最后一行失败?
其实我知道为什么 - 因为EndInvoke正在将paraConll方法的CallContext合并到当前的方法 - 但我不明白这个的原因.
对我来说,这种行为类似于从方法内部更改方法参数值:-(
编辑:我已经将我的代码示例更改为仅使用LogicalGetData和LogicalSetData.正如您在我的其他问题中所看到的,我想将一些数据传递给另一个线程,但我没想到EndInvoke()会覆盖我在其他线程中更改的值.
我正在尝试在C#中使用opengl.我有以下代码失败,错误2000 ERROR_INVALID_PIXEL_FORMAT
首先定义:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern IntPtr GetDC(IntPtr hWnd);
[StructLayout(LayoutKind.Sequential)]
public struct PIXELFORMATDESCRIPTOR
{
public void Init()
{
nSize = (ushort) Marshal.SizeOf(typeof (PIXELFORMATDESCRIPTOR));
nVersion = 1;
dwFlags = PFD_FLAGS.PFD_DRAW_TO_WINDOW | PFD_FLAGS.PFD_SUPPORT_OPENGL | PFD_FLAGS.PFD_DOUBLEBUFFER | PFD_FLAGS.PFD_SUPPORT_COMPOSITION;
iPixelType = PFD_PIXEL_TYPE.PFD_TYPE_RGBA;
cColorBits = 24;
cRedBits = cRedShift = cGreenBits = cGreenShift = cBlueBits = cBlueShift = 0;
cAlphaBits = cAlphaShift = 0;
cAccumBits = cAccumRedBits = cAccumGreenBits = cAccumBlueBits = cAccumAlphaBits = 0; …Run Code Online (Sandbox Code Playgroud) [TestMethod]
public void Memory()
{
var wr = new WeakReference("aaabbb");
Assert.IsTrue(wr.IsAlive);
GC.Collect();
GC.Collect();
GC.Collect();
GC.Collect();
GC.Collect();
Assert.IsFalse(wr.IsAlive); //<-- fails here
}
Run Code Online (Sandbox Code Playgroud)
它是.NET 3.5 SP1
任何人都可以告诉我为什么这个测试失败了?
编辑:谢谢stusmith
你有一个字符串的引用,因为它是一个常量,可能是实例(即没有动态分配),永远不会被收集.
就是这样.将第一行更改为
var wr = new WeakReference(new object());
Run Code Online (Sandbox Code Playgroud)
并且测试通过:-)
假设我在 Visual Studio 中有以下 C# 项目结构
现在我想通过以下方式将我的单元测试与用 html 编写的规范连接起来
//http://../path.to.UserStory1.html#or_even_some_anchor
[TestFixture]
public class Test1
{
[Test]
public void SomeTest()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这样,当我按 CTRL+单击评论中的链接时,我可以跳转到规范并查看应该真正测试哪些内容。问题是我不知道如何对项目中包含的 html 文件进行相对路径。
.net ×4
c# ×4
.net-3.5 ×1
c++ ×1
comments ×1
jit ×1
memory-leaks ×1
opengl ×1
unit-testing ×1
windows-8 ×1